{
 "cells": [
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": [
    "%env LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\n",
    "%env LLM_API_KEY=替换为自己的Qwen API Key"
   ],
   "id": "557fcc2d27066682"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "af375836-b870-458b-87d1-4e00565977eb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:04.597132Z",
     "iopub.status.busy": "2024-10-27T10:38:04.596935Z",
     "iopub.status.idle": "2024-10-27T10:38:04.599337Z",
     "shell.execute_reply": "2024-10-27T10:38:04.598808Z"
    },
    "papermill": {
     "duration": 0.10486,
     "end_time": "2024-10-27T10:38:04.600637",
     "exception": false,
     "start_time": "2024-10-27T10:38:04.495777",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%capture --no-stderr\n",
    "!pip install -U umap-learn langchain langchain-community langchain-openai langchain-cohere pypdf sentence_transformers chromadb shutil openpyxl FlagEmbedding cohere"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "1e2c72b8-ee12-4130-af88-699998aa230c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:04.808473Z",
     "iopub.status.busy": "2024-10-27T10:38:04.807740Z",
     "iopub.status.idle": "2024-10-27T10:38:05.015440Z",
     "shell.execute_reply": "2024-10-27T10:38:05.014953Z"
    },
    "papermill": {
     "duration": 0.31142,
     "end_time": "2024-10-27T10:38:05.016524",
     "exception": false,
     "start_time": "2024-10-27T10:38:04.705104",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "841d2b02-ad06-40d2-b11f-c7adccec6ca2",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:05.298329Z",
     "iopub.status.busy": "2024-10-27T10:38:05.297385Z",
     "iopub.status.idle": "2024-10-27T10:38:05.310252Z",
     "shell.execute_reply": "2024-10-27T10:38:05.307977Z"
    },
    "papermill": {
     "duration": 0.153561,
     "end_time": "2024-10-27T10:38:05.314993",
     "exception": false,
     "start_time": "2024-10-27T10:38:05.161432",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "expr_version = 'retrieval_v12_raptor'\n",
    "\n",
    "preprocess_output_dir = os.path.join(os.path.pardir, 'outputs', 'v1_20240713')\n",
    "expr_dir = os.path.join(os.path.pardir, 'experiments', expr_version)\n",
    "\n",
    "os.makedirs(expr_dir, exist_ok=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf7e81e3-4c82-4842-aef5-7592caaf1d39",
   "metadata": {
    "papermill": {
     "duration": 0.133531,
     "end_time": "2024-10-27T10:38:05.573329",
     "exception": false,
     "start_time": "2024-10-27T10:38:05.439798",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 读取文档"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e6920e29-bc7d-4635-be06-d151eaf0e100",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:05.830185Z",
     "iopub.status.busy": "2024-10-27T10:38:05.830009Z",
     "iopub.status.idle": "2024-10-27T10:38:07.398293Z",
     "shell.execute_reply": "2024-10-27T10:38:07.397786Z"
    },
    "papermill": {
     "duration": 1.692071,
     "end_time": "2024-10-27T10:38:07.399404",
     "exception": false,
     "start_time": "2024-10-27T10:38:05.707333",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain_community.document_loaders import PyPDFLoader\n",
    "\n",
    "loader = PyPDFLoader(os.path.join(os.path.pardir, 'data', '2024全球经济金融展望报告.pdf'))\n",
    "documents = loader.load()\n",
    "\n",
    "qa_df = pd.read_excel(os.path.join(preprocess_output_dir, 'question_answer.xlsx'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e53cba8c-7283-4baf-af29-2a378bf56c28",
   "metadata": {
    "papermill": {
     "duration": 0.133338,
     "end_time": "2024-10-27T10:38:07.663685",
     "exception": false,
     "start_time": "2024-10-27T10:38:07.530347",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 文档准备"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "841ec659-4ad7-4e1f-b1ea-3477bf97fde3",
   "metadata": {
    "papermill": {
     "duration": 0.133439,
     "end_time": "2024-10-27T10:38:07.934295",
     "exception": false,
     "start_time": "2024-10-27T10:38:07.800856",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## 文档切分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "74fe856a-7c19-4c3c-bb30-7abfa6298f74",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:08.172035Z",
     "iopub.status.busy": "2024-10-27T10:38:08.171056Z",
     "iopub.status.idle": "2024-10-27T10:38:08.206273Z",
     "shell.execute_reply": "2024-10-27T10:38:08.203971Z"
    },
    "papermill": {
     "duration": 0.143062,
     "end_time": "2024-10-27T10:38:08.211362",
     "exception": false,
     "start_time": "2024-10-27T10:38:08.068300",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from uuid import uuid4\n",
    "import os\n",
    "import pickle\n",
    "\n",
    "from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
    "\n",
    "def split_docs(documents, filepath, chunk_size=400, chunk_overlap=40, seperators=['\\n\\n\\n', '\\n\\n'], force_split=False):\n",
    "    if os.path.exists(filepath) and not force_split:\n",
    "        print('found cache, restoring...')\n",
    "        return pickle.load(open(filepath, 'rb'))\n",
    "\n",
    "    splitter = RecursiveCharacterTextSplitter(\n",
    "        chunk_size=chunk_size,\n",
    "        chunk_overlap=chunk_overlap,\n",
    "        separators=seperators\n",
    "    )\n",
    "    split_docs = splitter.split_documents(documents)\n",
    "    for chunk in split_docs:\n",
    "        chunk.metadata['uuid'] = str(uuid4())\n",
    "\n",
    "    pickle.dump(split_docs, open(filepath, 'wb'))\n",
    "\n",
    "    return split_docs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "aa25540d-0504-4ae7-9804-9e3862b132d5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:08.461397Z",
     "iopub.status.busy": "2024-10-27T10:38:08.460608Z",
     "iopub.status.idle": "2024-10-27T10:38:08.474756Z",
     "shell.execute_reply": "2024-10-27T10:38:08.472496Z"
    },
    "papermill": {
     "duration": 0.13652,
     "end_time": "2024-10-27T10:38:08.479970",
     "exception": false,
     "start_time": "2024-10-27T10:38:08.343450",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "found cache, restoring...\n"
     ]
    }
   ],
   "source": [
    "splitted_docs = split_docs(documents, os.path.join(preprocess_output_dir, 'split_docs.pkl'), chunk_size=500, chunk_overlap=50)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "220dbc3a-fceb-4e49-a3f1-01e16660b2a6",
   "metadata": {
    "papermill": {
     "duration": 0.100319,
     "end_time": "2024-10-27T10:38:08.710661",
     "exception": false,
     "start_time": "2024-10-27T10:38:08.610342",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8598a11c-25d8-4af1-a98b-06a8c394e261",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:08.937554Z",
     "iopub.status.busy": "2024-10-27T10:38:08.936770Z",
     "iopub.status.idle": "2024-10-27T10:38:09.829574Z",
     "shell.execute_reply": "2024-10-27T10:38:09.829119Z"
    },
    "papermill": {
     "duration": 1.019246,
     "end_time": "2024-10-27T10:38:09.830493",
     "exception": false,
     "start_time": "2024-10-27T10:38:08.811247",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "device: cuda\n"
     ]
    }
   ],
   "source": [
    "from langchain.embeddings import HuggingFaceBgeEmbeddings\n",
    "import torch\n",
    "\n",
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "print(f'device: {device}')\n",
    "\n",
    "def get_embeddings(model_path):\n",
    "    embeddings = HuggingFaceBgeEmbeddings(\n",
    "        model_name=model_path,\n",
    "        model_kwargs={'device': device},\n",
    "        encode_kwargs={'normalize_embeddings': True},\n",
    "        # show_progress=True\n",
    "        query_instruction='为这个句子生成表示以用于检索相关文章：'\n",
    "    )\n",
    "    return embeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "663ef1a4-5866-4f6b-8d9d-4724f62142cb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:10.119615Z",
     "iopub.status.busy": "2024-10-27T10:38:10.118494Z",
     "iopub.status.idle": "2024-10-27T10:38:12.381742Z",
     "shell.execute_reply": "2024-10-27T10:38:12.381241Z"
    },
    "papermill": {
     "duration": 2.400491,
     "end_time": "2024-10-27T10:38:12.382857",
     "exception": false,
     "start_time": "2024-10-27T10:38:09.982366",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import shutil\n",
    "\n",
    "from tqdm.auto import tqdm\n",
    "from langchain_community.vectorstores import Chroma\n",
    "\n",
    "model_path = 'BAAI/bge-large-zh-v1.5'\n",
    "embeddings = get_embeddings(model_path)\n",
    "\n",
    "persist_directory = os.path.join(expr_dir, 'chroma', 'bge')\n",
    "shutil.rmtree(persist_directory, ignore_errors=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b4bc433f-57df-4d2a-8ec7-18cfb772b95b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:12.620443Z",
     "iopub.status.busy": "2024-10-27T10:38:12.619258Z",
     "iopub.status.idle": "2024-10-27T10:38:13.006428Z",
     "shell.execute_reply": "2024-10-27T10:38:13.005973Z"
    },
    "papermill": {
     "duration": 0.491611,
     "end_time": "2024-10-27T10:38:13.007482",
     "exception": false,
     "start_time": "2024-10-27T10:38:12.515871",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain.llms import Ollama\n",
    "\n",
    "embd = get_embeddings(model_path)\n",
    "model = Ollama(\n",
    "    model='qwen2:7b-instruct-32k',\n",
    "    base_url='http://localhost:11434',\n",
    "    top_k=1 # 为了使结果可复现，正常使用不需要设置\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7c78c867-cf1d-4ed1-a76e-2df9121d745e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:13.289519Z",
     "iopub.status.busy": "2024-10-27T10:38:13.288134Z",
     "iopub.status.idle": "2024-10-27T10:38:16.037684Z",
     "shell.execute_reply": "2024-10-27T10:38:16.037181Z"
    },
    "papermill": {
     "duration": 2.899403,
     "end_time": "2024-10-27T10:38:16.038776",
     "exception": false,
     "start_time": "2024-10-27T10:38:13.139373",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from typing import Dict, List, Optional, Tuple\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import umap\n",
    "from langchain.prompts import ChatPromptTemplate\n",
    "from langchain_core.output_parsers import StrOutputParser\n",
    "from sklearn.mixture import GaussianMixture\n",
    "\n",
    "RANDOM_SEED = 224  # Fixed seed for reproducibility\n",
    "\n",
    "### --- Code from citations referenced above (added comments and docstrings) --- ###\n",
    "\n",
    "\n",
    "def global_cluster_embeddings(\n",
    "    embeddings: np.ndarray,\n",
    "    dim: int,\n",
    "    n_neighbors: Optional[int] = None,\n",
    "    metric: str = \"cosine\",\n",
    ") -> np.ndarray:\n",
    "    \"\"\"\n",
    "    Perform global dimensionality reduction on the embeddings using UMAP.\n",
    "\n",
    "    Parameters:\n",
    "    - embeddings: The input embeddings as a numpy array.\n",
    "    - dim: The target dimensionality for the reduced space.\n",
    "    - n_neighbors: Optional; the number of neighbors to consider for each point.\n",
    "                   If not provided, it defaults to the square root of the number of embeddings.\n",
    "    - metric: The distance metric to use for UMAP.\n",
    "\n",
    "    Returns:\n",
    "    - A numpy array of the embeddings reduced to the specified dimensionality.\n",
    "    \"\"\"\n",
    "    if n_neighbors is None:\n",
    "        n_neighbors = int((len(embeddings) - 1) ** 0.5)\n",
    "    return umap.UMAP(\n",
    "        n_neighbors=n_neighbors, n_components=dim, metric=metric\n",
    "    ).fit_transform(embeddings)\n",
    "\n",
    "\n",
    "def local_cluster_embeddings(\n",
    "    embeddings: np.ndarray, dim: int, num_neighbors: int = 10, metric: str = \"cosine\"\n",
    ") -> np.ndarray:\n",
    "    \"\"\"\n",
    "    Perform local dimensionality reduction on the embeddings using UMAP, typically after global clustering.\n",
    "\n",
    "    Parameters:\n",
    "    - embeddings: The input embeddings as a numpy array.\n",
    "    - dim: The target dimensionality for the reduced space.\n",
    "    - num_neighbors: The number of neighbors to consider for each point.\n",
    "    - metric: The distance metric to use for UMAP.\n",
    "\n",
    "    Returns:\n",
    "    - A numpy array of the embeddings reduced to the specified dimensionality.\n",
    "    \"\"\"\n",
    "    return umap.UMAP(\n",
    "        n_neighbors=num_neighbors, n_components=dim, metric=metric\n",
    "    ).fit_transform(embeddings)\n",
    "\n",
    "\n",
    "def get_optimal_clusters(\n",
    "    embeddings: np.ndarray, max_clusters: int = 50, random_state: int = RANDOM_SEED\n",
    ") -> int:\n",
    "    \"\"\"\n",
    "    Determine the optimal number of clusters using the Bayesian Information Criterion (BIC) with a Gaussian Mixture Model.\n",
    "\n",
    "    Parameters:\n",
    "    - embeddings: The input embeddings as a numpy array.\n",
    "    - max_clusters: The maximum number of clusters to consider.\n",
    "    - random_state: Seed for reproducibility.\n",
    "\n",
    "    Returns:\n",
    "    - An integer representing the optimal number of clusters found.\n",
    "    \"\"\"\n",
    "    max_clusters = min(max_clusters, len(embeddings))\n",
    "    n_clusters = np.arange(1, max_clusters)\n",
    "    bics = []\n",
    "    for n in n_clusters:\n",
    "        gm = GaussianMixture(n_components=n, random_state=random_state)\n",
    "        gm.fit(embeddings)\n",
    "        bics.append(gm.bic(embeddings))\n",
    "    return n_clusters[np.argmin(bics)]\n",
    "\n",
    "\n",
    "def GMM_cluster(embeddings: np.ndarray, threshold: float, random_state: int = 0):\n",
    "    \"\"\"\n",
    "    Cluster embeddings using a Gaussian Mixture Model (GMM) based on a probability threshold.\n",
    "\n",
    "    Parameters:\n",
    "    - embeddings: The input embeddings as a numpy array.\n",
    "    - threshold: The probability threshold for assigning an embedding to a cluster.\n",
    "    - random_state: Seed for reproducibility.\n",
    "\n",
    "    Returns:\n",
    "    - A tuple containing the cluster labels and the number of clusters determined.\n",
    "    \"\"\"\n",
    "    n_clusters = get_optimal_clusters(embeddings)\n",
    "    gm = GaussianMixture(n_components=n_clusters, random_state=random_state)\n",
    "    gm.fit(embeddings)\n",
    "    probs = gm.predict_proba(embeddings)\n",
    "    labels = [np.where(prob > threshold)[0] for prob in probs]\n",
    "    return labels, n_clusters\n",
    "\n",
    "\n",
    "def perform_clustering(\n",
    "    embeddings: np.ndarray,\n",
    "    dim: int,\n",
    "    threshold: float,\n",
    ") -> List[np.ndarray]:\n",
    "    \"\"\"\n",
    "    Perform clustering on the embeddings by first reducing their dimensionality globally, then clustering\n",
    "    using a Gaussian Mixture Model, and finally performing local clustering within each global cluster.\n",
    "\n",
    "    Parameters:\n",
    "    - embeddings: The input embeddings as a numpy array.\n",
    "    - dim: The target dimensionality for UMAP reduction.\n",
    "    - threshold: The probability threshold for assigning an embedding to a cluster in GMM.\n",
    "\n",
    "    Returns:\n",
    "    - A list of numpy arrays, where each array contains the cluster IDs for each embedding.\n",
    "    \"\"\"\n",
    "    if len(embeddings) <= dim + 1:\n",
    "        # Avoid clustering when there's insufficient data\n",
    "        return [np.array([0]) for _ in range(len(embeddings))]\n",
    "\n",
    "    # Global dimensionality reduction\n",
    "    reduced_embeddings_global = global_cluster_embeddings(embeddings, dim)\n",
    "    # Global clustering\n",
    "    global_clusters, n_global_clusters = GMM_cluster(\n",
    "        reduced_embeddings_global, threshold\n",
    "    )\n",
    "\n",
    "    all_local_clusters = [np.array([]) for _ in range(len(embeddings))]\n",
    "    total_clusters = 0\n",
    "\n",
    "    # Iterate through each global cluster to perform local clustering\n",
    "    for i in range(n_global_clusters):\n",
    "        # Extract embeddings belonging to the current global cluster\n",
    "        global_cluster_embeddings_ = embeddings[\n",
    "            np.array([i in gc for gc in global_clusters])\n",
    "        ]\n",
    "\n",
    "        if len(global_cluster_embeddings_) == 0:\n",
    "            continue\n",
    "        if len(global_cluster_embeddings_) <= dim + 1:\n",
    "            # Handle small clusters with direct assignment\n",
    "            local_clusters = [np.array([0]) for _ in global_cluster_embeddings_]\n",
    "            n_local_clusters = 1\n",
    "        else:   \n",
    "            # Local dimensionality reduction and clustering\n",
    "            reduced_embeddings_local = local_cluster_embeddings(\n",
    "                global_cluster_embeddings_, dim\n",
    "            )\n",
    "            local_clusters, n_local_clusters = GMM_cluster(\n",
    "                reduced_embeddings_local, threshold\n",
    "            )\n",
    "\n",
    "        # Assign local cluster IDs, adjusting for total clusters already processed\n",
    "        for j in range(n_local_clusters):\n",
    "            local_cluster_embeddings_ = global_cluster_embeddings_[\n",
    "                np.array([j in lc for lc in local_clusters])\n",
    "            ]\n",
    "            indices = np.where(\n",
    "                (embeddings == local_cluster_embeddings_[:, None]).all(-1)\n",
    "            )[1]\n",
    "            for idx in indices:\n",
    "                all_local_clusters[idx] = np.append(\n",
    "                    all_local_clusters[idx], j + total_clusters\n",
    "                )\n",
    "\n",
    "        total_clusters += n_local_clusters\n",
    "\n",
    "    return all_local_clusters\n",
    "\n",
    "\n",
    "### --- Our code below --- ###\n",
    "\n",
    "\n",
    "def embed(texts):\n",
    "    \"\"\"\n",
    "    Generate embeddings for a list of text documents.\n",
    "\n",
    "    This function assumes the existence of an `embd` object with a method `embed_documents`\n",
    "    that takes a list of texts and returns their embeddings.\n",
    "\n",
    "    Parameters:\n",
    "    - texts: List[str], a list of text documents to be embedded.\n",
    "\n",
    "    Returns:\n",
    "    - numpy.ndarray: An array of embeddings for the given text documents.\n",
    "    \"\"\"\n",
    "    text_embeddings = embd.embed_documents(texts)\n",
    "    text_embeddings_np = np.array(text_embeddings)\n",
    "    return text_embeddings_np\n",
    "\n",
    "\n",
    "def embed_cluster_texts(texts):\n",
    "    \"\"\"\n",
    "    Embeds a list of texts and clusters them, returning a DataFrame with texts, their embeddings, and cluster labels.\n",
    "\n",
    "    This function combines embedding generation and clustering into a single step. It assumes the existence\n",
    "    of a previously defined `perform_clustering` function that performs clustering on the embeddings.\n",
    "\n",
    "    Parameters:\n",
    "    - texts: List[str], a list of text documents to be processed.\n",
    "\n",
    "    Returns:\n",
    "    - pandas.DataFrame: A DataFrame containing the original texts, their embeddings, and the assigned cluster labels.\n",
    "    \"\"\"\n",
    "    text_embeddings_np = embed(texts)  # Generate embeddings\n",
    "    cluster_labels = perform_clustering(\n",
    "        text_embeddings_np, 10, 0.1\n",
    "    )  # Perform clustering on the embeddings\n",
    "    df = pd.DataFrame()  # Initialize a DataFrame to store the results\n",
    "    df[\"text\"] = texts  # Store original texts\n",
    "    df[\"embd\"] = list(text_embeddings_np)  # Store embeddings as a list in the DataFrame\n",
    "    df[\"cluster\"] = cluster_labels  # Store cluster labels\n",
    "    return df\n",
    "\n",
    "\n",
    "def fmt_txt(df: pd.DataFrame) -> str:\n",
    "    \"\"\"\n",
    "    Formats the text documents in a DataFrame into a single string.\n",
    "\n",
    "    Parameters:\n",
    "    - df: DataFrame containing the 'text' column with text documents to format.\n",
    "\n",
    "    Returns:\n",
    "    - A single string where all text documents are joined by a specific delimiter.\n",
    "    \"\"\"\n",
    "    unique_txt = df[\"text\"].tolist()\n",
    "    return \"--- --- \\n --- --- \".join(unique_txt)\n",
    "\n",
    "\n",
    "def embed_cluster_summarize_texts(\n",
    "    texts: List[str], level: int\n",
    ") -> Tuple[pd.DataFrame, pd.DataFrame]:\n",
    "    \"\"\"\n",
    "    Embeds, clusters, and summarizes a list of texts. This function first generates embeddings for the texts,\n",
    "    clusters them based on similarity, expands the cluster assignments for easier processing, and then summarizes\n",
    "    the content within each cluster.\n",
    "\n",
    "    Parameters:\n",
    "    - texts: A list of text documents to be processed.\n",
    "    - level: An integer parameter that could define the depth or detail of processing.\n",
    "\n",
    "    Returns:\n",
    "    - Tuple containing two DataFrames:\n",
    "      1. The first DataFrame (`df_clusters`) includes the original texts, their embeddings, and cluster assignments.\n",
    "      2. The second DataFrame (`df_summary`) contains summaries for each cluster, the specified level of detail,\n",
    "         and the cluster identifiers.\n",
    "    \"\"\"\n",
    "\n",
    "    # Embed and cluster the texts, resulting in a DataFrame with 'text', 'embd', and 'cluster' columns\n",
    "    df_clusters = embed_cluster_texts(texts)\n",
    "\n",
    "    # Prepare to expand the DataFrame for easier manipulation of clusters\n",
    "    expanded_list = []\n",
    "\n",
    "    # Expand DataFrame entries to document-cluster pairings for straightforward processing\n",
    "    for index, row in df_clusters.iterrows():\n",
    "        for cluster in row[\"cluster\"]:\n",
    "            expanded_list.append(\n",
    "                {\"text\": row[\"text\"], \"embd\": row[\"embd\"], \"cluster\": cluster}\n",
    "            )\n",
    "\n",
    "    # Create a new DataFrame from the expanded list\n",
    "    expanded_df = pd.DataFrame(expanded_list)\n",
    "\n",
    "    # Retrieve unique cluster identifiers for processing\n",
    "    all_clusters = expanded_df[\"cluster\"].unique()\n",
    "\n",
    "    print(f\"--Generated {len(all_clusters)} clusters--\")\n",
    "\n",
    "    # Summarization\n",
    "    # template = \"\"\"Here is a sub-set of LangChain Expression Language doc. \n",
    "    \n",
    "    # LangChain Expression Language provides a way to compose chain in LangChain.\n",
    "    \n",
    "    # Give a detailed summary of the documentation provided.\n",
    "    \n",
    "    # Documentation:\n",
    "    # {context}\n",
    "    # \"\"\"\n",
    "    template = \"\"\"这个文档是某金融机构，对2024年全球经济金融的展望报告。\n",
    "    请给出所提供文档的详细摘要。\n",
    "    文档:\n",
    "    \n",
    "    {context}\n",
    "    \"\"\"\n",
    "    \n",
    "    prompt = ChatPromptTemplate.from_template(template)\n",
    "    chain = prompt | model | StrOutputParser()\n",
    "\n",
    "    # Format text within each cluster for summarization\n",
    "    summaries = []\n",
    "    for i in all_clusters:\n",
    "        df_cluster = expanded_df[expanded_df[\"cluster\"] == i]\n",
    "        formatted_txt = fmt_txt(df_cluster)\n",
    "        summaries.append(chain.invoke({\"context\": formatted_txt}))\n",
    "\n",
    "    # Create a DataFrame to store summaries with their corresponding cluster and level\n",
    "    df_summary = pd.DataFrame(\n",
    "        {\n",
    "            \"summaries\": summaries,\n",
    "            \"level\": [level] * len(summaries),\n",
    "            \"cluster\": list(all_clusters),\n",
    "        }\n",
    "    )\n",
    "\n",
    "    return df_clusters, df_summary\n",
    "\n",
    "\n",
    "def recursive_embed_cluster_summarize(\n",
    "    texts: List[str], level: int = 1, n_levels: int = 3\n",
    ") -> Dict[int, Tuple[pd.DataFrame, pd.DataFrame]]:\n",
    "    \"\"\"\n",
    "    Recursively embeds, clusters, and summarizes texts up to a specified level or until\n",
    "    the number of unique clusters becomes 1, storing the results at each level.\n",
    "\n",
    "    Parameters:\n",
    "    - texts: List[str], texts to be processed.\n",
    "    - level: int, current recursion level (starts at 1).\n",
    "    - n_levels: int, maximum depth of recursion.\n",
    "\n",
    "    Returns:\n",
    "    - Dict[int, Tuple[pd.DataFrame, pd.DataFrame]], a dictionary where keys are the recursion\n",
    "      levels and values are tuples containing the clusters DataFrame and summaries DataFrame at that level.\n",
    "    \"\"\"\n",
    "    results = {}  # Dictionary to store results at each level\n",
    "\n",
    "    # Perform embedding, clustering, and summarization for the current level\n",
    "    df_clusters, df_summary = embed_cluster_summarize_texts(texts, level)\n",
    "\n",
    "    # Store the results of the current level\n",
    "    results[level] = (df_clusters, df_summary)\n",
    "\n",
    "    # Determine if further recursion is possible and meaningful\n",
    "    unique_clusters = df_summary[\"cluster\"].nunique()\n",
    "    if level < n_levels and unique_clusters > 1:\n",
    "        # Use summaries as the input texts for the next level of recursion\n",
    "        new_texts = df_summary[\"summaries\"].tolist()\n",
    "        next_level_results = recursive_embed_cluster_summarize(\n",
    "            new_texts, level + 1, n_levels\n",
    "        )\n",
    "\n",
    "        # Merge the results from the next level into the current results dictionary\n",
    "        results.update(next_level_results)\n",
    "\n",
    "    return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5c6d08a4-08a8-431c-b436-d92de90e6cfd",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:38:16.318655Z",
     "iopub.status.busy": "2024-10-27T10:38:16.318354Z",
     "iopub.status.idle": "2024-10-27T10:47:06.004162Z",
     "shell.execute_reply": "2024-10-27T10:47:06.003563Z"
    },
    "papermill": {
     "duration": 529.820629,
     "end_time": "2024-10-27T10:47:06.005291",
     "exception": false,
     "start_time": "2024-10-27T10:38:16.184662",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--Generated 8 clusters--\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--Generated 1 clusters--\n"
     ]
    }
   ],
   "source": [
    "leaf_texts = [doc.page_content for doc in splitted_docs]\n",
    "summarize_dict = recursive_embed_cluster_summarize(leaf_texts, level=1, n_levels=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "87261649-b4df-46aa-a907-3aa260c95fea",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:06.287116Z",
     "iopub.status.busy": "2024-10-27T10:47:06.286299Z",
     "iopub.status.idle": "2024-10-27T10:47:06.297481Z",
     "shell.execute_reply": "2024-10-27T10:47:06.295289Z"
    },
    "papermill": {
     "duration": 0.141149,
     "end_time": "2024-10-27T10:47:06.302484",
     "exception": false,
     "start_time": "2024-10-27T10:47:06.161335",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "all_texts = leaf_texts.copy()\n",
    "\n",
    "for level in sorted(summarize_dict.keys()):\n",
    "    summaries = summarize_dict[level][1]['summaries'].tolist()\n",
    "    all_texts.extend(summaries)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "6042eacb-8b1f-4655-8eb8-3971535bab18",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:06.552228Z",
     "iopub.status.busy": "2024-10-27T10:47:06.551914Z",
     "iopub.status.idle": "2024-10-27T10:47:10.527358Z",
     "shell.execute_reply": "2024-10-27T10:47:10.526822Z"
    },
    "papermill": {
     "duration": 4.110775,
     "end_time": "2024-10-27T10:47:10.528434",
     "exception": false,
     "start_time": "2024-10-27T10:47:06.417659",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "vector_db = Chroma.from_texts(texts=all_texts, embedding=embd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f148ed63-f360-491d-b2c3-03c913850e99",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:10.774937Z",
     "iopub.status.busy": "2024-10-27T10:47:10.774563Z",
     "iopub.status.idle": "2024-10-27T10:47:10.804073Z",
     "shell.execute_reply": "2024-10-27T10:47:10.803362Z"
    },
    "papermill": {
     "duration": 0.120341,
     "end_time": "2024-10-27T10:47:10.805429",
     "exception": false,
     "start_time": "2024-10-27T10:47:10.685088",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "### 全球经济金融展望报告摘要\n",
      "\n",
      "#### 经济增长与区域差异\n",
      "\n",
      "- **全球经济增长**：预计2024年全球经济增速将放缓至约2.5%，较2023年下降0.2个百分点，呈现“复苏+分化”的趋势。\n",
      "- **发达经济体**：面临较大的经济压力。欧元区和英国的通胀压力较大，经济表现弱于其他主要发达经济体；美国经济处于下行阶段，但实现软着陆的可能性高于衰退。\n",
      "- **新兴经济体**：增长动力逐渐企稳，尤其是中国和其他亚太经济体，将为全球经济复苏提供重要支撑。\n",
      "\n",
      "#### 需求与投资\n",
      "\n",
      "- **需求端**：内需是支撑发达经济体增长的主要动力，但对经济的拉动力正在减弱。美国消费未受加息明显影响，欧洲消费指数整体稳定。\n",
      "- **投资情况**：发达经济体投资受到加息政策的影响较大，国内投资和跨境投资均承压。美国私人投资在2023年一季度触底后逐渐反弹，但制造业和设备投资放缓；欧盟投资增速放缓，房地产投资减少。\n",
      "\n",
      "#### 国际贸易\n",
      "\n",
      "- **货物贸易**：全球货物贸易量和价格指数均承压下行，主要经济体出口贸易同比增速下降。\n",
      "- **跨境直接投资**：预计2023年全球跨境直接投资将继续下行，但降幅较2022年收窄。流向新兴经济体的跨境直接投资和证券投资预计将有所回升。\n",
      "\n",
      "#### 重点国别/地区经济形势\n",
      "\n",
      "- **美国**：2024年经济增长将放缓至1.7%，软着陆的可能性高于衰退。\n",
      "- **欧洲**：预计2023年欧元区和英国经济增速分别为0.6%和0.3%，2024年分别达0.9%和0.5%。经济疲软势头至少将持续至上半年。\n",
      "\n",
      "#### 欧盟对华反补贴调查\n",
      "\n",
      "- 2023年10月，欧盟委员会决定对中国电动汽车发起反补贴调查，这是首起针对中国电动汽车的此类调查。\n",
      "- 历次欧盟对华反补贴调查情况回顾显示，涉案产品包括铜版纸、数据卡、彩涂板等，最终措施多为加征关税。\n",
      "\n",
      "### 结论\n",
      "\n",
      "2024年全球经济将面临“复苏+分化”的局面，发达经济体增长压力较大，而新兴市场和发展中经济体的增长有望逐渐企稳。需求端下行压力可能大于生产端，但一些稳定因素如供应链和工业生产的恢复、全球供求形势的改善等将对经济形成托底作用。美国经济实现软着陆的可能性高于衰退，欧洲经济增长疲软势头将持续至上半年后有望逐步复苏。欧盟对中国电动汽车发起反补贴调查，显示了国际贸易中的竞争与保护主义趋势。\n",
      "\n",
      "### 风险提示\n",
      "\n",
      "- **地缘政治局势**：紧张的地缘政治局势可能加剧金融领域的动荡。\n",
      "- **高利率和投资审查**：高利率对需求端的影响以及全球范围内投资审查的趋严可能导致并购交易疲软，影响跨境投资活动。\n"
     ]
    }
   ],
   "source": [
    "print(vector_db.similarity_search('2023年全球经济增长的特点是什么？')[0].page_content)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7925564a-7d30-4914-baaf-4a00abb7686d",
   "metadata": {
    "papermill": {
     "duration": 0.133356,
     "end_time": "2024-10-27T10:47:11.030283",
     "exception": false,
     "start_time": "2024-10-27T10:47:10.896927",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 生成答案"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "50404beb-3be0-4aaa-b124-8c7a52b84531",
   "metadata": {
    "editable": true,
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:11.290162Z",
     "iopub.status.busy": "2024-10-27T10:47:11.289383Z",
     "iopub.status.idle": "2024-10-27T10:47:11.306563Z",
     "shell.execute_reply": "2024-10-27T10:47:11.304232Z"
    },
    "papermill": {
     "duration": 0.158432,
     "end_time": "2024-10-27T10:47:11.311642",
     "exception": false,
     "start_time": "2024-10-27T10:47:11.153210",
     "status": "completed"
    },
    "slideshow": {
     "slide_type": ""
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import time\n",
    "\n",
    "def rag(llm, query, n_chunks=4):\n",
    "    prompt_tmpl = \"\"\"\n",
    "你是一个金融分析师，擅长根据所获取的信息片段，对问题进行分析和推理。\n",
    "你的任务是根据所获取的信息片段（<<<<context>>><<<</context>>>之间的内容）回答问题。\n",
    "回答保持简洁，不必重复问题，不要添加描述性解释和与答案无关的任何内容。\n",
    "已知信息：\n",
    "<<<<context>>>\n",
    "{{knowledge}}\n",
    "<<<</context>>>\n",
    "\n",
    "问题：{{query}}\n",
    "请回答：\n",
    "\"\"\".strip()\n",
    "    chunks = vector_db.similarity_search(query, k=n_chunks)\n",
    "    prompt = prompt_tmpl.replace('{{knowledge}}', '\\n\\n'.join([doc.page_content for doc in chunks])).replace('{{query}}', query)\n",
    "    retry_count = 3\n",
    "\n",
    "    resp = ''\n",
    "    while retry_count > 0:\n",
    "        try:\n",
    "            resp = llm.invoke(prompt)\n",
    "            break\n",
    "        except Exception as e:\n",
    "            retry_count -= 1\n",
    "            sleeping_seconds = 2 ** (4 - retry_count)\n",
    "            print(f\"query={query}, error={e}, sleeping={sleeping_seconds}, remaining retry count={retry_count}\")\n",
    "            \n",
    "            time.sleep(sleeping_seconds)\n",
    "    \n",
    "    return resp, chunks"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "95e5a804-2dc6-411c-ba71-6ccf765b2b73",
   "metadata": {
    "papermill": {
     "duration": 0.133707,
     "end_time": "2024-10-27T10:47:11.576236",
     "exception": false,
     "start_time": "2024-10-27T10:47:11.442529",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "## 预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "27132c3b-0051-4df6-bf57-fd804acb8d17",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:11.824880Z",
     "iopub.status.busy": "2024-10-27T10:47:11.824093Z",
     "iopub.status.idle": "2024-10-27T10:47:11.834815Z",
     "shell.execute_reply": "2024-10-27T10:47:11.832487Z"
    },
    "papermill": {
     "duration": 0.118809,
     "end_time": "2024-10-27T10:47:11.839552",
     "exception": false,
     "start_time": "2024-10-27T10:47:11.720743",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain.llms import Ollama\n",
    "\n",
    "ollama_llm = Ollama(\n",
    "    model='qwen2:7b-instruct-32k',\n",
    "    base_url='http://localhost:11434',\n",
    "    top_k=1\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "166392d8-f801-4372-b8ad-3e79aef0b350",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:12.056220Z",
     "iopub.status.busy": "2024-10-27T10:47:12.055984Z",
     "iopub.status.idle": "2024-10-27T10:47:12.063044Z",
     "shell.execute_reply": "2024-10-27T10:47:12.062409Z"
    },
    "papermill": {
     "duration": 0.10977,
     "end_time": "2024-10-27T10:47:12.064548",
     "exception": false,
     "start_time": "2024-10-27T10:47:11.954778",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "prediction_df = qa_df[qa_df['dataset'] == 'test'][['uuid', 'question', 'qa_type', 'answer']].rename(columns={'answer': 'ref_answer'})\n",
    "\n",
    "def predict(llm, prediction_df, n_chunks):\n",
    "    prediction_df = prediction_df.copy()\n",
    "    answer_dict = {}\n",
    "\n",
    "    for idx, row in tqdm(prediction_df.iterrows(), total=len(prediction_df)):\n",
    "        uuid = row['uuid']\n",
    "        question = row['question']\n",
    "        answer, chunks = rag(llm, question, n_chunks=n_chunks)\n",
    "        assert len(chunks) <= n_chunks\n",
    "        answer_dict[question] = {\n",
    "            'uuid': uuid,\n",
    "            'ref_answer': row['ref_answer'],\n",
    "            'gen_answer': answer,\n",
    "            'chunks': chunks\n",
    "        }\n",
    "        \n",
    "    prediction_df.loc[:, 'gen_answer'] = prediction_df['question'].apply(lambda q: answer_dict[q]['gen_answer'])\n",
    "    prediction_df.loc[:, 'chunks'] = prediction_df['question'].apply(lambda q: answer_dict[q]['chunks'])\n",
    "\n",
    "    return prediction_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "3adcbd83-b45e-4f22-9a7f-afeb60cbf916",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:12.304125Z",
     "iopub.status.busy": "2024-10-27T10:47:12.303347Z",
     "iopub.status.idle": "2024-10-27T10:47:12.309122Z",
     "shell.execute_reply": "2024-10-27T10:47:12.308650Z"
    },
    "papermill": {
     "duration": 0.132161,
     "end_time": "2024-10-27T10:47:12.310090",
     "exception": false,
     "start_time": "2024-10-27T10:47:12.177929",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "save_path = os.path.join(expr_dir, 'predictions.pkl')\n",
    "\n",
    "if os.path.exists(save_path):\n",
    "    pred_dfs = pickle.load(open(save_path, 'rb'))\n",
    "else:\n",
    "    pred_dfs = {}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "ca46d5f1-e698-457d-abb6-92d83cd59c66",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T10:47:12.538165Z",
     "iopub.status.busy": "2024-10-27T10:47:12.537394Z",
     "iopub.status.idle": "2024-10-27T13:02:21.517522Z",
     "shell.execute_reply": "2024-10-27T13:02:21.516996Z"
    },
    "papermill": {
     "duration": 8109.107415,
     "end_time": "2024-10-27T13:02:21.519472",
     "exception": false,
     "start_time": "2024-10-27T10:47:12.412057",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "48ec3bcc73bf40219ec157f5993c777c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/10 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=1\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f0ed5859ce1f4c3092ab92b0ff3b4eb5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=2\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0a43d7c887ad4ca59c66707e15cc67f8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=3\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "04984174ecc94033a9fe5712f14b72d0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=4\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1281508498f0404a9b08ce2f8969c494",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=5\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "109ee4b4a14e48d79079a689afd4f5d8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=6\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f5ae932d777444be9784be58a2149b8e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=7\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "83747350d9d64ebea3b4e59c26e9791b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=8\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9ac117c33b2441b393283fc2d875fc5a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=9\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ba8512b549ed40efa69a12aa747cbaeb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=10\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b6e4212701bb46a0839ab5845b0edef9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/100 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_chunks_arr = range(1, 11)\n",
    "\n",
    "for n_chunks in tqdm(n_chunks_arr):\n",
    "    if n_chunks in pred_dfs:\n",
    "        continue\n",
    "\n",
    "    print(f\"n_chunks={n_chunks}\")\n",
    "    pred_dfs[n_chunks] = predict(ollama_llm, prediction_df, n_chunks=n_chunks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "fc513e7f-2f1c-4e09-8242-3bd1e25c6c25",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:02:21.816442Z",
     "iopub.status.busy": "2024-10-27T13:02:21.815651Z",
     "iopub.status.idle": "2024-10-27T13:02:21.828893Z",
     "shell.execute_reply": "2024-10-27T13:02:21.826454Z"
    },
    "papermill": {
     "duration": 0.165245,
     "end_time": "2024-10-27T13:02:21.833672",
     "exception": false,
     "start_time": "2024-10-27T13:02:21.668427",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred_dfs.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "4a1c867e-d59c-454d-93f5-2c8e23b666de",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:02:22.094957Z",
     "iopub.status.busy": "2024-10-27T13:02:22.094135Z",
     "iopub.status.idle": "2024-10-27T13:02:22.105347Z",
     "shell.execute_reply": "2024-10-27T13:02:22.103082Z"
    },
    "papermill": {
     "duration": 0.151848,
     "end_time": "2024-10-27T13:02:22.109976",
     "exception": false,
     "start_time": "2024-10-27T13:02:21.958128",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "save_path = os.path.join(expr_dir, 'pred_dfs.pkl')\n",
    "\n",
    "if not os.path.exists(save_path):\n",
    "    print(f'saving to {save_path}')\n",
    "    pickle.dump(pred_dfs, open(save_path, 'wb'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d79e974-089f-4c08-ba5e-804f6542e06a",
   "metadata": {
    "papermill": {
     "duration": 0.136694,
     "end_time": "2024-10-27T13:02:22.373352",
     "exception": false,
     "start_time": "2024-10-27T13:02:22.236658",
     "status": "completed"
    },
    "tags": []
   },
   "source": [
    "# 评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "217568fe-c0e4-49eb-9a7c-9fdfbc033d8a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:02:22.597838Z",
     "iopub.status.busy": "2024-10-27T13:02:22.597666Z",
     "iopub.status.idle": "2024-10-27T13:02:22.787403Z",
     "shell.execute_reply": "2024-10-27T13:02:22.786886Z"
    },
    "papermill": {
     "duration": 0.291916,
     "end_time": "2024-10-27T13:02:22.788484",
     "exception": false,
     "start_time": "2024-10-27T13:02:22.496568",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "from langchain_openai import ChatOpenAI\n",
    "import time\n",
    "\n",
    "judge_llm = ChatOpenAI(\n",
    "    api_key=os.environ['LLM_API_KEY'],\n",
    "    base_url=os.environ['LLM_BASE_URL'],\n",
    "    model_name='qwen2-72b-instruct',\n",
    "    temperature=0\n",
    ")\n",
    "\n",
    "def evaluate(prediction_df):\n",
    "    \"\"\"\n",
    "    对预测结果进行打分\n",
    "    :param prediction_df: 预测结果，需要包含问题，参考答案，生成的答案，列名分别为question, ref_answer, gen_answer\n",
    "    :return 打分模型原始返回结果\n",
    "    \"\"\"\n",
    "    prompt_tmpl = \"\"\"\n",
    "你是一个经济学博士，现在我有一系列问题，有一个助手已经对这些问题进行了回答，你需要参照参考答案，评价这个助手的回答是否正确，仅回复“是”或“否”即可，不要带其他描述性内容或无关信息。\n",
    "问题：\n",
    "<question>\n",
    "{{question}}\n",
    "</question>\n",
    "\n",
    "参考答案：\n",
    "<ref_answer>\n",
    "{{ref_answer}}\n",
    "</ref_answer>\n",
    "\n",
    "助手回答：\n",
    "<gen_answer>\n",
    "{{gen_answer}}\n",
    "</gen_answer>\n",
    "请评价：\n",
    "    \"\"\"\n",
    "    results = []\n",
    "\n",
    "    for _, row in prediction_df.iterrows():\n",
    "        question = row['question']\n",
    "        ref_answer = row['ref_answer']\n",
    "        gen_answer = row['gen_answer']\n",
    "\n",
    "        prompt = prompt_tmpl.replace('{{question}}', question).replace('{{ref_answer}}', str(ref_answer)).replace('{{gen_answer}}', gen_answer).strip()\n",
    "        \n",
    "        retry_count = 3\n",
    "        result = ''\n",
    "        \n",
    "        while retry_count > 0:\n",
    "            try:\n",
    "                result = judge_llm.invoke(prompt).content\n",
    "                break\n",
    "            except Exception as e:\n",
    "                retry_count -= 1\n",
    "                sleeping_seconds = 2 ** (4 - retry_count)\n",
    "                print(f\"query={query}, error={e}, sleeping={sleeping_seconds}, remaining retry count={retry_count}\")\n",
    "                \n",
    "                time.sleep(sleeping_seconds)\n",
    "        \n",
    "        results.append(result)\n",
    "\n",
    "        time.sleep(1)\n",
    "    return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "71db81af-b8f9-47ba-958b-761896516605",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:02:23.057291Z",
     "iopub.status.busy": "2024-10-27T13:02:23.056511Z",
     "iopub.status.idle": "2024-10-27T13:28:00.013540Z",
     "shell.execute_reply": "2024-10-27T13:28:00.011243Z"
    },
    "papermill": {
     "duration": 1537.245323,
     "end_time": "2024-10-27T13:28:00.187782",
     "exception": false,
     "start_time": "2024-10-27T13:02:22.942459",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a55277b8bf5e4e62945d0666e64f3e51",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/10 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=1 raw_score unique: ['否' '是'], accuracy=0.48\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=2 raw_score unique: ['是' '否'], accuracy=0.65\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=3 raw_score unique: ['是' '否'\n",
      " '否\\n\\n（注：虽然助手的回答提供了更详细的信息，但与参考答案的关键信息“美联储、欧洲央行以及英格兰央行暂停加息”并不完全一致，特别是在提到英格兰央行的情况时有所出入，因此根据题目要求仅判断是否与参考答案一致，答案为“否”。）'], accuracy=0.7\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=4 raw_score unique: ['是' '否'], accuracy=0.76\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=5 raw_score unique: ['是' '否'\n",
      " '否\\n\\n理由：虽然助手提到了高利率和投资审查趋严这两个因素，但是遗漏了地缘政治局势紧张和金融领域动荡加剧这两个同样重要的因素。因此，助手的回答并不完全正确。但是按照您的要求，我只会回答“是”或“否”，所以我的回答是“否”。'], accuracy=0.75\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=6 raw_score unique: ['是' '否'], accuracy=0.75\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=7 raw_score unique: ['是' '否'], accuracy=0.73\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=8 raw_score unique: ['是' '否'], accuracy=0.79\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=9 raw_score unique: ['是' '否'], accuracy=0.84\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n_chunks=10 raw_score unique: ['是' '否'], accuracy=0.75\n"
     ]
    }
   ],
   "source": [
    "metrics = []\n",
    "\n",
    "for n_chunks in tqdm(pred_dfs):\n",
    "    pred_df = pred_dfs[n_chunks]\n",
    "    pred_df['raw_score'] = evaluate(pred_df)\n",
    "    pred_df['score'] = (pred_df['raw_score'] == '是').astype(int)\n",
    "    print(f\"n_chunks={n_chunks} raw_score unique: {pred_df['raw_score'].unique()}, accuracy={pred_df['score'].mean()}\")\n",
    "\n",
    "    metrics.append({\n",
    "        'n_chunks': n_chunks,\n",
    "        'accuracy': pred_df['score'].mean()\n",
    "    })"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "074260df-d5dc-492e-995e-8860e91a0221",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:28:00.447713Z",
     "iopub.status.busy": "2024-10-27T13:28:00.446894Z",
     "iopub.status.idle": "2024-10-27T13:28:00.457417Z",
     "shell.execute_reply": "2024-10-27T13:28:00.455080Z"
    },
    "papermill": {
     "duration": 0.139959,
     "end_time": "2024-10-27T13:28:00.461977",
     "exception": false,
     "start_time": "2024-10-27T13:28:00.322018",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "metrics_df = pd.DataFrame(metrics)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "0bc76271-fc84-4a46-8c57-480e9b9afe73",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:28:00.724082Z",
     "iopub.status.busy": "2024-10-27T13:28:00.723782Z",
     "iopub.status.idle": "2024-10-27T13:28:00.732751Z",
     "shell.execute_reply": "2024-10-27T13:28:00.732096Z"
    },
    "papermill": {
     "duration": 0.133608,
     "end_time": "2024-10-27T13:28:00.734125",
     "exception": false,
     "start_time": "2024-10-27T13:28:00.600517",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n_chunks</th>\n",
       "      <th>accuracy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>0.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0.76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0.73</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0.79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>0.84</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>0.75</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   n_chunks  accuracy\n",
       "0         1      0.48\n",
       "1         2      0.65\n",
       "2         3      0.70\n",
       "3         4      0.76\n",
       "4         5      0.75\n",
       "5         6      0.75\n",
       "6         7      0.73\n",
       "7         8      0.79\n",
       "8         9      0.84\n",
       "9        10      0.75"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "metrics_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "f201f26f-8e61-4ead-a637-ca3af5cb663d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:28:00.915753Z",
     "iopub.status.busy": "2024-10-27T13:28:00.914898Z",
     "iopub.status.idle": "2024-10-27T13:28:01.502818Z",
     "shell.execute_reply": "2024-10-27T13:28:01.502377Z"
    },
    "papermill": {
     "duration": 0.680991,
     "end_time": "2024-10-27T13:28:01.503855",
     "exception": false,
     "start_time": "2024-10-27T13:28:00.822864",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='n_chunks', ylabel='accuracy'>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGxCAYAAACeKZf2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAwVElEQVR4nO3de1xUdeL/8fcAcvOCF3JQQvGWl7ygkDxQu3yLonTd3FqX3EoXi+93U9bLbK2SF1JL1DWyVotspVrLpNrsnmaT2FasFEZpXsraglRAf6UobmAz8/ujR9OyIMGIHPj0ej4e5/FoPvM5Z96f8CFvzzkzY/N4PB4BAAAYws/qAAAAAE2JcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMEqA1QGam9vt1qFDh9S+fXvZbDar4wAAgAbweDw6ceKEunfvLj+/+s/N/OzKzaFDhxQVFWV1DAAA4IOSkhKdf/759c752ZWb9u3bS/r+f06HDh0sTgMAABqioqJCUVFR3t/j9fnZlZsfLkV16NCBcgMAQCvTkFtKuKEYAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYJQAqwMAANDaPP3MSKsj1Os3EwusjmApztwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiWl5s1a9YoOjpawcHBio+PV0FB/d+HsWrVKvXv318hISGKiorS7Nmz9e233zZTWgAA0NJZWm5yc3PlcDiUkZGhnTt3atiwYUpKSlJ5eXmd8zds2KC5c+cqIyNDe/fu1bp165Sbm6s777yzmZMDAICWytJyk5WVpdTUVKWkpGjQoEHKzs5WaGiocnJy6pz/7rvvavTo0frtb3+r6OhoXXXVVZo0adJPnu0BAAA/H5aVm+rqahUWFioxMfHHMH5+SkxMVH5+fp37jBo1SoWFhd4y8/nnn+vVV1/V2LFjz/g6VVVVqqioqLEBAABzBVj1wkePHpXL5ZLdbq8xbrfbtW/fvjr3+e1vf6ujR49qzJgx8ng8+u677/T73/++3stSmZmZWrRoUZNmBwAALZflNxQ3Rl5enpYuXaoHH3xQO3fu1HPPPadXXnlFS5YsOeM+6enpOn78uHcrKSlpxsQAAKC5WXbmJjw8XP7+/iorK6sxXlZWpoiIiDr3WbBggW6++WbdeuutkqQhQ4aosrJS//u//6t58+bJz692VwsKClJQUFDTLwAAALRIlp25CQwMVGxsrJxOp3fM7XbL6XQqISGhzn1OnTpVq8D4+/tLkjwez7kLCwAAWg3LztxIksPh0JQpUxQXF6eRI0dq1apVqqysVEpKiiRp8uTJioyMVGZmpiRp/PjxysrK0vDhwxUfH68DBw5owYIFGj9+vLfkAACAnzdLy01ycrKOHDmihQsXqrS0VDExMdq8ebP3JuPi4uIaZ2rmz58vm82m+fPn6+DBgzrvvPM0fvx43XPPPVYtAQDQCHfddZfVEerV0vOhYWyen9n1nIqKCoWFhen48ePq0KGD1XEA4GelpZeHhuZ7+pmR5zbIWfrNRPM+/60xv79b1bulAAAAfgrlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwCuUGAAAYxdLvlgJMtv2SS62OUK9L39pudQQAOCc4cwMAAIxCuQEAAEah3AAAAKNwzw2Aeq3+40tWRzijtHvHN2jePTf9+hwnOTvznnjW6gj4mRr27BarI5zRh79O8nlfztwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEbhQ/wAoJXYe8+bVkeo18B5l1sdAZDEmRsAAGAYyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFFaRLlZs2aNoqOjFRwcrPj4eBUUFJxx7mWXXSabzVZrGzduXDMmBgAALZXl5SY3N1cOh0MZGRnauXOnhg0bpqSkJJWXl9c5/7nnntPhw4e92+7du+Xv76+JEyc2c3IAANASWV5usrKylJqaqpSUFA0aNEjZ2dkKDQ1VTk5OnfM7d+6siIgI77Z161aFhoZSbgAAgCSLy011dbUKCwuVmJjoHfPz81NiYqLy8/MbdIx169bphhtuUNu2bet8vqqqShUVFTU2AABgLku/W+ro0aNyuVyy2+01xu12u/bt2/eT+xcUFGj37t1at27dGedkZmZq0aJFZ50VzWf0X0ZbHaFe7/zhHasjAADqYfllqbOxbt06DRkyRCNHjjzjnPT0dB0/fty7lZSUNGNCAADQ3Cw9cxMeHi5/f3+VlZXVGC8rK1NERES9+1ZWVmrjxo1avHhxvfOCgoIUFBR01lkBAEDrYOmZm8DAQMXGxsrpdHrH3G63nE6nEhIS6t33mWeeUVVVlW666aZzHRMAALQilp65kSSHw6EpU6YoLi5OI0eO1KpVq1RZWamUlBRJ0uTJkxUZGanMzMwa+61bt04TJkxQly5drIgNAABaKMvLTXJyso4cOaKFCxeqtLRUMTEx2rx5s/cm4+LiYvn51TzBtH//fr399tt6/fXXrYgMAABaMMvLjSSlpaUpLS2tzufy8vJqjfXv318ej+ccpwIAAK1Rq363FAAAwH+j3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwSoDVAdC0ihcPsTpCvXos3GV1BACA4ThzAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwCuUGAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABjF8nKzZs0aRUdHKzg4WPHx8SooKKh3/rFjxzR9+nR169ZNQUFBuuCCC/Tqq682U1oAANDSBVj54rm5uXI4HMrOzlZ8fLxWrVqlpKQk7d+/X127dq01v7q6WldeeaW6du2qZ599VpGRkfryyy/VsWPH5g8PAABaJEvLTVZWllJTU5WSkiJJys7O1iuvvKKcnBzNnTu31vycnBx9/fXXevfdd9WmTRtJUnR0dHNGBgAALZxll6Wqq6tVWFioxMTEH8P4+SkxMVH5+fl17vPiiy8qISFB06dPl91u1+DBg7V06VK5XK4zvk5VVZUqKipqbAAAwFyWlZujR4/K5XLJbrfXGLfb7SotLa1zn88//1zPPvusXC6XXn31VS1YsED33nuv7r777jO+TmZmpsLCwrxbVFRUk64DAAC0LJbfUNwYbrdbXbt21dq1axUbG6vk5GTNmzdP2dnZZ9wnPT1dx48f924lJSXNmBgAADQ3y+65CQ8Pl7+/v8rKymqMl5WVKSIios59unXrpjZt2sjf3987NnDgQJWWlqq6ulqBgYG19gkKClJQUFDThgcAAC2WZWduAgMDFRsbK6fT6R1zu91yOp1KSEioc5/Ro0frwIEDcrvd3rFPPvlE3bp1q7PYAACAnx9LL0s5HA498sgjevzxx7V3717ddtttqqys9L57avLkyUpPT/fOv+222/T1119r5syZ+uSTT/TKK69o6dKlmj59ulVLAAAALYylbwVPTk7WkSNHtHDhQpWWliomJkabN2/23mRcXFwsP78f+1dUVJS2bNmi2bNna+jQoYqMjNTMmTM1Z84cq5YAAABaGEvLjSSlpaUpLS2tzufy8vJqjSUkJOif//znOU4FAABaq1b1bikAAICfQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwCuUGAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUn8rNtm3bmjoHAABAk/Cp3Fx99dXq06eP7r77bpWUlJx1iDVr1ig6OlrBwcGKj49XQUHBGec+9thjstlsNbbg4OCzzgAAAMzgU7k5ePCg0tLS9Oyzz6p3795KSkrS008/rerq6kYfKzc3Vw6HQxkZGdq5c6eGDRumpKQklZeXn3GfDh066PDhw97tyy+/9GUZAADAQD6Vm/DwcM2ePVtFRUXasWOHLrjgAk2bNk3du3fXjBkz9OGHHzb4WFlZWUpNTVVKSooGDRqk7OxshYaGKicn54z72Gw2RUREeDe73e7LMgAAgIHO+obiESNGKD09XWlpaTp58qRycnIUGxuriy++WB9//HG9+1ZXV6uwsFCJiYk/BvLzU2JiovLz88+438mTJ9WzZ09FRUXp2muvrfd1qqqqVFFRUWMDAADm8rncnD59Ws8++6zGjh2rnj17asuWLVq9erXKysp04MAB9ezZUxMnTqz3GEePHpXL5ap15sVut6u0tLTOffr376+cnBy98MILeuKJJ+R2uzVq1Ch99dVXdc7PzMxUWFiYd4uKivJtwQAAoFUI8GWnP/zhD3rqqafk8Xh08803a8WKFRo8eLD3+bZt22rlypXq3r17kwX9QUJCghISEryPR40apYEDB+rhhx/WkiVLas1PT0+Xw+HwPq6oqKDgAABgMJ/KzZ49e/SXv/xF1113nYKCguqcEx4e/pNvGQ8PD5e/v7/KyspqjJeVlSkiIqJBWdq0aaPhw4frwIEDdT4fFBR0xowAAMA8Pl2WcjqdmjRpUr2lISAgQJdeemm9xwkMDFRsbKycTqd3zO12y+l01jg7Ux+Xy6Vdu3apW7duDQsPAACM5lO5yczMrPPdTDk5OVq+fHmjjuVwOPTII4/o8ccf1969e3XbbbepsrJSKSkpkqTJkycrPT3dO3/x4sV6/fXX9fnnn2vnzp266aab9OWXX+rWW2/1ZSkAAMAwPl2Wevjhh7Vhw4Za4xdeeKFuuOEGzZkzp8HHSk5O1pEjR7Rw4UKVlpYqJiZGmzdv9t5kXFxcLD+/HzvYN998o9TUVJWWlqpTp06KjY3Vu+++q0GDBvmyFAAAYBifyk1paWmdl4HOO+88HT58uNHHS0tLU1paWp3P5eXl1Xh833336b777mv0awAAgJ8Hny5LRUVF6Z133qk1/s4775yTd0gBAAA0lE9nblJTUzVr1iydPn1al19+uaTvbzL+05/+pD/+8Y9NGrC5xN7xN6sj1Kvwz5OtjgAAQKvgU7m544479P/+3//TtGnTvN8nFRwcrDlz5tS4+RcAAKC5+VRubDabli9frgULFmjv3r0KCQlRv379+DwZAABgOZ/KzQ/atWuniy66qKmyAAAAnDWfy83777+vp59+WsXFxd5LUz947rnnzjoYAACAL3x6t9TGjRs1atQo7d27V5s2bdLp06f18ccf680331RYWFhTZwQAAGgwn8rN0qVLdd999+mll15SYGCg7r//fu3bt0+/+c1v1KNHj6bOCAAA0GA+lZvPPvtM48aNk/T990NVVlbKZrNp9uzZWrt2bZMGBAAAaAyfyk2nTp104sQJSVJkZKR2794tSTp27JhOnTrVdOkAAAAayacbii+55BJt3bpVQ4YM0cSJEzVz5ky9+eab2rp1q6644oqmzggAANBgPpWb1atX69tvv5UkzZs3T23atNG7776r66+/XvPnz2/SgAAAAI3R6HLz3Xff6eWXX1ZSUpIkyc/PT3Pnzm3yYAAAAL5o9D03AQEB+v3vf+89cwMAANCS+HRD8ciRI1VUVNTEUQAAAM6eT/fcTJs2TQ6HQyUlJYqNjVXbtm1rPD906NAmCQcAANBYPpWbG264QZI0Y8YM75jNZpPH45HNZpPL5WqadAAAAI3kU7n517/+1dQ5AAAAmoRP5aZnz55NnQMAAKBJ+FRu/va3v9X7/OTJk30KAwAAcLZ8KjczZ86s8fj06dM6deqUAgMDFRoaSrkBAACW8emt4N98802N7eTJk9q/f7/GjBmjp556qqkzAgAANJhP5aYu/fr107Jly2qd1QEAAGhOTVZupO8/vfjQoUNNeUgAAIBG8ememxdffLHGY4/Ho8OHD2v16tUaPXp0kwQDAADwhU/lZsKECTUe22w2nXfeebr88st17733NkUuAAAAn/hUbtxud1PnAAAAaBJNes8NAACA1XwqN9dff72WL19ea3zFihWaOHHiWYcCAADwlU/l5q233tLYsWNrjV9zzTV66623zjoUAACAr3wqNydPnlRgYGCt8TZt2qiioqLRx1uzZo2io6MVHBys+Ph4FRQUNGi/jRs3ymaz1brBGQAA/Hz5VG6GDBmi3NzcWuMbN27UoEGDGnWs3NxcORwOZWRkaOfOnRo2bJiSkpJUXl5e735ffPGFbr/9dl188cWNej0AAGA2n94ttWDBAl133XX67LPPdPnll0uSnE6nnnrqKT3zzDONOlZWVpZSU1OVkpIiScrOztYrr7yinJwczZ07t859XC6XbrzxRi1atEj/+Mc/dOzYMV+WAQAADOTTmZvx48fr+eef14EDBzRt2jT98Y9/1FdffaU33nijUZeIqqurVVhYqMTExB8D+fkpMTFR+fn5Z9xv8eLF6tq1q2655RZf4gMAAIP5dOZGksaNG6dx48ad1YsfPXpULpdLdru9xrjdbte+ffvq3Oftt9/WunXrVFRU1KDXqKqqUlVVlfexL/cEAQCA1sOnMzfvvfeeduzYUWt8x44dev/998861JmcOHFCN998sx555BGFh4c3aJ/MzEyFhYV5t6ioqHOWDwAAWM+ncjN9+nSVlJTUGj948KCmT5/e4OOEh4fL399fZWVlNcbLysoUERFRa/5nn32mL774QuPHj1dAQIACAgL0t7/9TS+++KICAgL02Wef1donPT1dx48f92515QYAAObw6bLUnj17NGLEiFrjw4cP1549exp8nMDAQMXGxsrpdHrv1XG73XI6nUpLS6s1f8CAAdq1a1eNsfnz5+vEiRO6//776zwrExQUpKCgoAZnAgAArZtP5SYoKEhlZWXq3bt3jfHDhw8rIKBxh3Q4HJoyZYri4uI0cuRIrVq1SpWVld53T02ePFmRkZHKzMxUcHCwBg8eXGP/jh07SlKtcQAA8PPkU7m56qqrlJ6erhdeeEFhYWGSpGPHjunOO+/UlVde2ahjJScn68iRI1q4cKFKS0sVExOjzZs3e28yLi4ulp8fX4EFAAAaxqdys3LlSl1yySXq2bOnhg8fLkkqKiqS3W7X+vXrG328tLS0Oi9DSVJeXl69+z722GONfj0AAGAun8pNZGSkPvroIz355JP68MMPFRISopSUFE2aNElt2rRp6owAAAAN5vPn3LRt21ZjxoxRjx49VF1dLUl67bXXJEm//OUvmyYdAABAI/lUbj7//HP96le/0q5du2Sz2eTxeGSz2bzPu1yuJgsIAADQGD7dqTtz5kz16tVL5eXlCg0N1e7du7V9+3bFxcX95D0yAAAA55JPZ27y8/P15ptvKjw8XH5+fvL399eYMWOUmZmpGTNm6IMPPmjqnAAAAA3i05kbl8ul9u3bS/r+U4YPHTokSerZs6f279/fdOkAAAAayaczN4MHD9aHH36oXr16KT4+XitWrFBgYKDWrl1b64P9AAAAmpNP5Wb+/PmqrKyUJC1evFi/+MUvdPHFF6tLly7Kzc1t0oAAAACN4VO5SUpK8v533759tW/fPn399dfq1KlTjXdNAQAANDefP+fmv3Xu3LmpDgUAAOAzvrQJAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUVpEuVmzZo2io6MVHBys+Ph4FRQUnHHuc889p7i4OHXs2FFt27ZVTEyM1q9f34xpAQBAS2Z5ucnNzZXD4VBGRoZ27typYcOGKSkpSeXl5XXO79y5s+bNm6f8/Hx99NFHSklJUUpKirZs2dLMyQEAQEtkebnJyspSamqqUlJSNGjQIGVnZys0NFQ5OTl1zr/sssv0q1/9SgMHDlSfPn00c+ZMDR06VG+//XYzJwcAAC2RpeWmurpahYWFSkxM9I75+fkpMTFR+fn5P7m/x+OR0+nU/v37dckll5zLqAAAoJUIsPLFjx49KpfLJbvdXmPcbrdr3759Z9zv+PHjioyMVFVVlfz9/fXggw/qyiuvrHNuVVWVqqqqvI8rKiqaJjwAAGiRLC03vmrfvr2Kiop08uRJOZ1OORwO9e7dW5dddlmtuZmZmVq0aFHzhwQAAJawtNyEh4fL399fZWVlNcbLysoUERFxxv38/PzUt29fSVJMTIz27t2rzMzMOstNenq6HA6H93FFRYWioqKaZgEAAKDFsfSem8DAQMXGxsrpdHrH3G63nE6nEhISGnwct9td49LTfwoKClKHDh1qbAAAwFyWX5ZyOByaMmWK4uLiNHLkSK1atUqVlZVKSUmRJE2ePFmRkZHKzMyU9P1lpri4OPXp00dVVVV69dVXtX79ej300ENWLgMAALQQlpeb5ORkHTlyRAsXLlRpaaliYmK0efNm703GxcXF8vP78QRTZWWlpk2bpq+++kohISEaMGCAnnjiCSUnJ1u1BAAA0IJYXm4kKS0tTWlpaXU+l5eXV+Px3XffrbvvvrsZUgEAgNbI8g/xAwAAaEqUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwCuUGAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo7SIcrNmzRpFR0crODhY8fHxKigoOOPcRx55RBdffLE6deqkTp06KTExsd75AADg58XycpObmyuHw6GMjAzt3LlTw4YNU1JSksrLy+ucn5eXp0mTJmnbtm3Kz89XVFSUrrrqKh08eLCZkwMAgJbI8nKTlZWl1NRUpaSkaNCgQcrOzlZoaKhycnLqnP/kk09q2rRpiomJ0YABA/TXv/5VbrdbTqezmZMDAICWyNJyU11drcLCQiUmJnrH/Pz8lJiYqPz8/AYd49SpUzp9+rQ6d+58rmICAIBWJMDKFz969KhcLpfsdnuNcbvdrn379jXoGHPmzFH37t1rFKT/VFVVpaqqKu/jiooK3wMDAIAWz/LLUmdj2bJl2rhxozZt2qTg4OA652RmZiosLMy7RUVFNXNKAADQnCwtN+Hh4fL391dZWVmN8bKyMkVERNS778qVK7Vs2TK9/vrrGjp06Bnnpaen6/jx496tpKSkSbIDAICWydJyExgYqNjY2Bo3A/9wc3BCQsIZ91uxYoWWLFmizZs3Ky4urt7XCAoKUocOHWpsAADAXJbecyNJDodDU6ZMUVxcnEaOHKlVq1apsrJSKSkpkqTJkycrMjJSmZmZkqTly5dr4cKF2rBhg6Kjo1VaWipJateundq1a2fZOgAAQMtgeblJTk7WkSNHtHDhQpWWliomJkabN2/23mRcXFwsP78fTzA99NBDqq6u1q9//esax8nIyNBdd93VnNEBAEALZHm5kaS0tDSlpaXV+VxeXl6Nx1988cW5DwQAAFqtVv1uKQAAgP9GuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwCuUGAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMIrl5WbNmjWKjo5WcHCw4uPjVVBQcMa5H3/8sa6//npFR0fLZrNp1apVzRcUAAC0CpaWm9zcXDkcDmVkZGjnzp0aNmyYkpKSVF5eXuf8U6dOqXfv3lq2bJkiIiKaOS0AAGgNLC03WVlZSk1NVUpKigYNGqTs7GyFhoYqJyenzvkXXXSR/vznP+uGG25QUFBQM6cFAACtgWXlprq6WoWFhUpMTPwxjJ+fEhMTlZ+fb1UsAADQygVY9cJHjx6Vy+WS3W6vMW6327Vv374me52qqipVVVV5H1dUVDTZsQEAQMtj+Q3F51pmZqbCwsK8W1RUlNWRAADAOWRZuQkPD5e/v7/KyspqjJeVlTXpzcLp6ek6fvy4dyspKWmyYwMAgJbHsnITGBio2NhYOZ1O75jb7ZbT6VRCQkKTvU5QUJA6dOhQYwMAAOay7J4bSXI4HJoyZYri4uI0cuRIrVq1SpWVlUpJSZEkTZ48WZGRkcrMzJT0/U3Ie/bs8f73wYMHVVRUpHbt2qlv376WrQMAALQclpab5ORkHTlyRAsXLlRpaaliYmK0efNm703GxcXF8vP78eTSoUOHNHz4cO/jlStXauXKlbr00kuVl5fX3PEBAEALZGm5kaS0tDSlpaXV+dx/F5bo6Gh5PJ5mSAUAAFor498tBQAAfl4oNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAABgFMoNAAAwCuUGAAAYhXIDAACMQrkBAABGodwAAACjUG4AAIBRKDcAAMAolBsAAGAUyg0AADAK5QYAABiFcgMAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARmkR5WbNmjWKjo5WcHCw4uPjVVBQUO/8Z555RgMGDFBwcLCGDBmiV199tZmSAgCAls7ycpObmyuHw6GMjAzt3LlTw4YNU1JSksrLy+uc/+6772rSpEm65ZZb9MEHH2jChAmaMGGCdu/e3czJAQBAS2R5ucnKylJqaqpSUlI0aNAgZWdnKzQ0VDk5OXXOv//++3X11Vfrjjvu0MCBA7VkyRKNGDFCq1evbubkAACgJbK03FRXV6uwsFCJiYneMT8/PyUmJio/P7/OffLz82vMl6SkpKQzzgcAAD8vAVa++NGjR+VyuWS322uM2+127du3r859SktL65xfWlpa5/yqqipVVVV5Hx8/flySVFFRUWOeq+rfjc7fnP4775mc+NZ1jpOcnYas47t/f9cMSXzX0J9F5XdmrOPfVafOcRLfNXQN354+fY6TnJ2GruPkt5XnOMnZacg6/vPv45aooT+LU6da/9+1kuQ61XL/TP33Gn547PF4fnJfS8tNc8jMzNSiRYtqjUdFRVmQxndhf/m91RGaRmaY1QnOWtic1r8GSVJY61/Hn9ZYnaBp3P106/9ZSJLutjrA2Vu2bJnVEZpEyu9a/5+pM63gxIkTCvuJv78sLTfh4eHy9/dXWVlZjfGysjJFRETUuU9ERESj5qenp8vhcHgfu91uff311+rSpYtsNttZrqBuFRUVioqKUklJiTp06HBOXqM5mLAOE9YgmbEOE9YgsY6WxIQ1SGasoznW4PF4dOLECXXv3v0n51pabgIDAxUbGyun06kJEyZI+r58OJ1OpaWl1blPQkKCnE6nZs2a5R3bunWrEhIS6pwfFBSkoKCgGmMdO3Zsivg/qUOHDq32D+p/MmEdJqxBMmMdJqxBYh0tiQlrkMxYx7lew0+dsfmB5ZelHA6HpkyZori4OI0cOVKrVq1SZWWlUlJSJEmTJ09WZGSkMjMzJUkzZ87UpZdeqnvvvVfjxo3Txo0b9f7772vt2rVWLgMAALQQlpeb5ORkHTlyRAsXLlRpaaliYmK0efNm703DxcXF8vP78U1do0aN0oYNGzR//nzdeeed6tevn55//nkNHjzYqiUAAIAWxPJyI0lpaWlnvAyVl5dXa2zixImaOHHiOU7lu6CgIGVkZNS6HNbamLAOE9YgmbEOE9YgsY6WxIQ1SGaso6WtweZpyHuqAAAAWgnLP6EYAACgKVFuAACAUSg3AADAKJSbJvTWW29p/Pjx6t69u2w2m55//nmrIzVaZmamLrroIrVv315du3bVhAkTtH//fqtjNdpDDz2koUOHej9zISEhQa+99prVsc7KsmXLZLPZanzGU2tw1113yWaz1dgGDBhgdSyfHDx4UDfddJO6dOmikJAQDRkyRO+//77VsRosOjq61s/CZrNp+vTpVkdrFJfLpQULFqhXr14KCQlRnz59tGTJkgZ9LH9LcuLECc2aNUs9e/ZUSEiIRo0apffee8/qWPX6qd9zHo9HCxcuVLdu3RQSEqLExER9+umnzZ6TctOEKisrNWzYMK1Z03o/E3779u2aPn26/vnPf2rr1q06ffq0rrrqKlVWttzvH6nL+eefr2XLlqmwsFDvv/++Lr/8cl177bX6+OOPrY7mk/fee08PP/ywhg4danUUn1x44YU6fPiwd3v77betjtRo33zzjUaPHq02bdrotdde0549e3TvvfeqU6dOVkdrsPfee6/Gz2Hr1q2S1KLffVqX5cuX66GHHtLq1au1d+9eLV++XCtWrNBf/vIXq6M1yq233qqtW7dq/fr12rVrl6666iolJibq4MGDVkc7o5/6PbdixQo98MADys7O1o4dO9S2bVslJSXp22+/bd6gHpwTkjybNm2yOsZZKy8v90jybN++3eooZ61Tp06ev/71r1bHaLQTJ054+vXr59m6davn0ksv9cycOdPqSI2SkZHhGTZsmNUxztqcOXM8Y8aMsTpGk5o5c6anT58+HrfbbXWURhk3bpxn6tSpNcauu+46z4033mhRosY7deqUx9/f3/Pyyy/XGB8xYoRn3rx5FqVqnP/+Ped2uz0RERGeP//5z96xY8eOeYKCgjxPPfVUs2bjzA3q9cO3qHfu3NniJL5zuVzauHGjKisrz/g1HS3Z9OnTNW7cOCUmJlodxWeffvqpunfvrt69e+vGG29UcXGx1ZEa7cUXX1RcXJwmTpyorl27avjw4XrkkUesjuWz6upqPfHEE5o6deo5+569c2XUqFFyOp365JNPJEkffvih3n77bV1zzTUWJ2u47777Ti6XS8HBwTXGQ0JCWuWZTUn617/+pdLS0hp/V4WFhSk+Pl75+fnNmqVFfIgfWia3261Zs2Zp9OjRrfIToHft2qWEhAR9++23ateunTZt2qRBgwZZHatRNm7cqJ07d7b46/D1iY+P12OPPab+/fvr8OHDWrRokS6++GLt3r1b7du3tzpeg33++ed66KGH5HA4dOedd+q9997TjBkzFBgYqClTplgdr9Gef/55HTt2TL/73e+sjtJoc+fOVUVFhQYMGCB/f3+5XC7dc889uvHGG62O1mDt27dXQkKClixZooEDB8put+upp55Sfn6++vbta3U8n5SWlkqS9xsGfmC3273PNRfKDc5o+vTp2r17d6v9V0T//v1VVFSk48eP69lnn9WUKVO0ffv2VlNwSkpKNHPmTG3durXWv+5ak//81/TQoUMVHx+vnj176umnn9Ytt9xiYbLGcbvdiouL09KlSyVJw4cP1+7du5Wdnd0qy826det0zTXXNOgblluap59+Wk8++aQ2bNigCy+8UEVFRZo1a5a6d+/eqn4W69ev19SpUxUZGSl/f3+NGDFCkyZNUmFhodXRWj0uS6FOaWlpevnll7Vt2zadf/75VsfxSWBgoPr27avY2FhlZmZq2LBhuv/++62O1WCFhYUqLy/XiBEjFBAQoICAAG3fvl0PPPCAAgIC5HK5rI7ok44dO+qCCy7QgQMHrI7SKN26datVjAcOHNgqL7F9+eWXeuONN3TrrbdaHcUnd9xxh+bOnasbbrhBQ4YM0c0336zZs2d7v2C5tejTp4+2b9+ukydPqqSkRAUFBTp9+rR69+5tdTSfRERESJLKyspqjJeVlXmfay6UG9Tg8XiUlpamTZs26c0331SvXr2sjtRk3G63qqqqrI7RYFdccYV27dqloqIi7xYXF6cbb7xRRUVF8vf3tzqiT06ePKnPPvtM3bp1szpKo4wePbrWxyJ88skn6tmzp0WJfPfoo4+qa9euGjdunNVRfHLq1KkaX6gsSf7+/nK73RYlOjtt27ZVt27d9M0332jLli269tprrY7kk169eikiIkJOp9M7VlFRoR07djT7/Y5clmpCJ0+erPGv0X/9618qKipS586d1aNHDwuTNdz06dO1YcMGvfDCC2rfvr33OmlYWJhCQkIsTtdw6enpuuaaa9SjRw+dOHFCGzZsUF5enrZs2WJ1tAZr3759rXud2rZtqy5durSqe6Buv/12jR8/Xj179tShQ4eUkZEhf39/TZo0yepojTJ79myNGjVKS5cu1W9+8xsVFBRo7dq1Wrt2rdXRGsXtduvRRx/VlClTFBDQOn8FjB8/Xvfcc4969OihCy+8UB988IGysrI0depUq6M1ypYtW+TxeNS/f38dOHBAd9xxhwYMGKCUlBSro53RT/2emzVrlu6++27169dPvXr10oIFC9S9e3dNmDCheYM263uzDLdt2zaPpFrblClTrI7WYHXll+R59NFHrY7WKFOnTvX07NnTExgY6DnvvPM8V1xxhef111+3OtZZa41vBU9OTvZ069bNExgY6ImMjPQkJyd7Dhw4YHUsn7z00kuewYMHe4KCgjwDBgzwrF271upIjbZlyxaPJM/+/futjuKziooKz8yZMz09evTwBAcHe3r37u2ZN2+ep6qqyupojZKbm+vp3bu3JzAw0BMREeGZPn2659ixY1bHqtdP/Z5zu92eBQsWeOx2uycoKMhzxRVXWPJnjW8FBwAARuGeGwAAYBTKDQAAMArlBgAAGIVyAwAAjEK5AQAARqHcAAAAo1BuAACAUSg3AADAKJQbAK3GY489po4dO57z1/niiy9ks9lUVFR0zl8LQNOj3AAAAKNQbgAAgFEoNwCa3GWXXaYZM2boT3/6kzp37qyIiAjdddddDdr32LFj+r//+z/Z7XYFBwdr8ODBevnll2vM2bJliwYOHKh27drp6quv1uHDh2u89qxZs2rMnzBhgn73u995H0dHR2vp0qWaOnWq2rdvrx49etT77d4ul0tTp07VgAEDVFxcLI/Ho7vuuks9evRQUFCQunfvrhkzZjRofQDOPcoNgHPi8ccfV9u2bbVjxw6tWLFCixcv1tatW+vdx+1265prrtE777yjJ554Qnv27NGyZcvk7+/vnXPq1CmtXLlS69ev11tvvaXi4mLdfvvtjc537733Ki4uTh988IGmTZum2267Tfv37681r6qqShMnTlRRUZH+8Y9/qEePHvr73/+u++67Tw8//LA+/fRTPf/88xoyZEijMwA4NwKsDgDATEOHDlVGRoYkqV+/flq9erWcTqeuvPLKM+7zxhtvqKCgQHv37tUFF1wgSerdu3eNOadPn1Z2drb69OkjSUpLS9PixYsbnW/s2LGaNm2aJGnOnDm67777tG3bNvXv39875+TJkxo3bpyqqqq0bds2hYWFSZKKi4sVERGhxMREtWnTRj169NDIkSMbnQHAucGZGwDnxNChQ2s87tatm8rLy+vdp6ioSOeff7632NQlNDTUW2waetyfymez2RQREVHrOJMmTVJlZaVef/11b7GRpIkTJ+rf//63evfurdTUVG3atEnfffddozMAODcoNwDOiTZt2tR4bLPZ5Ha7690nJCTEp+N6PB7vYz8/vxqPpe/P9viSb+zYsfroo4+Un59fYzwqKkr79+/Xgw8+qJCQEE2bNk2XXHJJna8DoPlRbgC0GEOHDtVXX32lTz75xOdjnHfeeTVuMHa5XNq9e7dPx7rtttu0bNky/fKXv9T27dtrPBcSEqLx48frgQceUF5envLz87Vr1y6fcwNoOtxzA6DFuPTSS3XJJZfo+uuvV1ZWlvr27at9+/bJZrPp6quvbtAxLr/8cjkcDr3yyivq06ePsrKydOzYMZ8z/eEPf5DL5dIvfvELvfbaaxozZowee+wxuVwuxcfHKzQ0VE888YRCQkLUs2dPn18HQNOh3ABoUf7+97/r9ttv997v0rdvXy1btqzB+0+dOlUffvihJk+erICAAM2ePVv/8z//c1aZZs2aJbfbrbFjx2rz5s3q2LGjli1bJofDIZfLpSFDhuill15Sly5dzup1ADQNm+e/L04DAAC0YtxzAwAAjEK5AdBsnnzySbVr167O7cILL7Q6HgBDcFkKQLM5ceKEysrK6nyuTZs23JALoElQbgAAgFG4LAUAAIxCuQEAAEah3AAAAKNQbgAAgFEoNwAAwCiUGwAAYBTKDQAAMArlBgAAGOX/A7F1EbBJ0aPtAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "\n",
    "sns.barplot(x='n_chunks', y='accuracy', data=metrics_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "79325429-9cf1-4e2c-95ac-cb0c1a3b6156",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-10-27T13:28:01.760522Z",
     "iopub.status.busy": "2024-10-27T13:28:01.759709Z",
     "iopub.status.idle": "2024-10-27T13:28:01.768386Z",
     "shell.execute_reply": "2024-10-27T13:28:01.766456Z"
    },
    "papermill": {
     "duration": 0.137043,
     "end_time": "2024-10-27T13:28:01.773061",
     "exception": false,
     "start_time": "2024-10-27T13:28:01.636018",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "save_path = os.path.join(expr_dir, 'eval_dfs.pkl')\n",
    "\n",
    "if not os.path.exists(save_path):\n",
    "    print(f'saving to {save_path}')\n",
    "    pickle.dump(pred_dfs, open(save_path, 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "88fc7227-9c21-48da-b179-5070406eb113",
   "metadata": {
    "papermill": {
     "duration": 0.132899,
     "end_time": "2024-10-27T13:28:02.036352",
     "exception": false,
     "start_time": "2024-10-27T13:28:01.903453",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 10200.954221,
   "end_time": "2024-10-27T13:28:03.764439",
   "environment_variables": {},
   "exception": null,
   "input_path": "12_raptor.ipynb",
   "output_path": "run_12_raptor.ipynb",
   "parameters": {},
   "start_time": "2024-10-27T10:38:02.810218",
   "version": "2.6.0"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "04345600dd5145f2a1c1efbc61321566": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "04984174ecc94033a9fe5712f14b72d0": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_212d50286cd64db0855cc27869db9447",
        "IPY_MODEL_de51d063a748497ab3e0c0d67373fd1c",
        "IPY_MODEL_7b3dd86ba5734276a50aacc642a591a5"
       ],
       "layout": "IPY_MODEL_ef23c9e858754114a419283b46271cc7",
       "tabbable": null,
       "tooltip": null
      }
     },
     "05f96f263f29416f892b1d580cbb28e8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "0739bdb7b2ae4f70a08fe9ff139ef46f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "0a43d7c887ad4ca59c66707e15cc67f8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_ada409f95834451bbac735081ba0207d",
        "IPY_MODEL_59882e63902641638cfdaa52a07997d2",
        "IPY_MODEL_536dc416f1df4333854ad8ddf04db704"
       ],
       "layout": "IPY_MODEL_edfc9c9f4e074acca86aad6386a28dd9",
       "tabbable": null,
       "tooltip": null
      }
     },
     "0bb69d31463d4c9c9a059714e885e408": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_c04fdcf17b514647a46ed845762a0772",
       "placeholder": "​",
       "style": "IPY_MODEL_5c6b503b8a4846c8b54a1a7602f25002",
       "tabbable": null,
       "tooltip": null,
       "value": " 10/10 [25:36&lt;00:00, 153.40s/it]"
      }
     },
     "0c544dadce444edba75970d22b779572": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "0fb686173fb4434488ad234df5ba615e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "109ee4b4a14e48d79079a689afd4f5d8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_fecacb8a6a504240abbc3b40a43c7e78",
        "IPY_MODEL_fcff4305b21940f5a1c74e0711d37834",
        "IPY_MODEL_5197ff3cbaa147b5a9d4cbf8e223c99b"
       ],
       "layout": "IPY_MODEL_a2757cbaf88a4e95a3b1b966127ebff7",
       "tabbable": null,
       "tooltip": null
      }
     },
     "1257ad144c2042f2aa10a20bd45010b6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "1281508498f0404a9b08ce2f8969c494": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_2c64103b6465413f97be9ead12a83fdb",
        "IPY_MODEL_b4489057e31544d8ab74eae49e99220e",
        "IPY_MODEL_fdc2f19ce48443c6b4e8b3cdb79cca37"
       ],
       "layout": "IPY_MODEL_05f96f263f29416f892b1d580cbb28e8",
       "tabbable": null,
       "tooltip": null
      }
     },
     "141bd918d14f45ab826061c5a22f737f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_d980b71ecb3044948cc751b9cd63a89b",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_f018037200ac4327a46ddc2be919f150",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "15cdb6f577794687a7d8c7c4cb05eaee": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "1724daba5c0a478d9df2a882a7bcb155": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_52a8e21bf8b74e469113a1f0ece55479",
       "placeholder": "​",
       "style": "IPY_MODEL_82c915e0c83846ba866bc3191467d6e0",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "17c952c4081345f7a1958e5a7abbfe41": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_d8bbae4fdecf44a19ab22b1700ac001c",
       "placeholder": "​",
       "style": "IPY_MODEL_d5799a1883ef435e8862a5d1ddaa358a",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "212d50286cd64db0855cc27869db9447": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_6a5335aab1894b488f0b279217dbb167",
       "placeholder": "​",
       "style": "IPY_MODEL_396ea62714c44912bfea184627bdbe02",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "24a092d46c6a47c489122f2036e063ba": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "250a5f37434e4173a06eca09fecd3c54": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "2558f3b0de2d4403ab6241b320b60c72": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "2634c104490a4600abf665084a8b6122": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "2838b6f0772f499f9ec5d776d81d6567": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "28e2e7802bdf4ca892fac9cc48c731c9": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "2c64103b6465413f97be9ead12a83fdb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_47e189fca30a4a18867797dc03a0b229",
       "placeholder": "​",
       "style": "IPY_MODEL_6e2f94141e3b434a934ac2f05e639399",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "2f9ac2d6b27643b8803344f28f46c699": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "315150487239443596db34d81be000a3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "350c0648b34f449d91eb7c6fd169bc18": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5eff418b2459480aad205d8be5375b19",
       "placeholder": "​",
       "style": "IPY_MODEL_a78db5645500488d8b6dfb91ad9fe631",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "376b35346af84786965883a5d8c46051": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "396ea62714c44912bfea184627bdbe02": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "3a07c7b2846742e496a66025b272984c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_ee26fa6543d4419191068914b9199bdb",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_8a7f37476da34c34854bfab27762eee8",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "3b8b073698fb47afaccd18356f57d773": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "3c72304a37404ca78147be3e0de0c5d0": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_926813f3e97e4d029b7457f617741c94",
       "placeholder": "​",
       "style": "IPY_MODEL_847cf798b7b7461f94e70cb9bfba00a7",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [17:17&lt;00:00, 21.16s/it]"
      }
     },
     "3da8c3dee9b542a3be28e6b883f96145": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "3e7dc579e1b5408292b8fd1e1959d51c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "47e189fca30a4a18867797dc03a0b229": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "484f71db3be94feb86a97a05a3f90b4b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "4885bc3b27b74ee0934bcfc4f1d1083b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "48ec3bcc73bf40219ec157f5993c777c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_350c0648b34f449d91eb7c6fd169bc18",
        "IPY_MODEL_da226b6f791044b9ad8ca1059c46a1f2",
        "IPY_MODEL_ba0b73af5a584deca15e755bec725120"
       ],
       "layout": "IPY_MODEL_c9982b6ae1ef40279a7aa74e12adab21",
       "tabbable": null,
       "tooltip": null
      }
     },
     "4966465024f24872873892adf303fe64": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "4f1cff4a4ed84666b6cdc94ade9b19c6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_3b8b073698fb47afaccd18356f57d773",
       "placeholder": "​",
       "style": "IPY_MODEL_99b1c3c95c9b4de49efa107688ed8a84",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "513ace2f58784eaba0dddfae5d9904c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "5197ff3cbaa147b5a9d4cbf8e223c99b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_4966465024f24872873892adf303fe64",
       "placeholder": "​",
       "style": "IPY_MODEL_376b35346af84786965883a5d8c46051",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [12:57&lt;00:00, 16.91s/it]"
      }
     },
     "520b96c4d5ed435fa8c68cbd39da8ea4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "5258259e284244e2806b0d1236c4a696": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "52a8e21bf8b74e469113a1f0ece55479": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "536dc416f1df4333854ad8ddf04db704": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_fa03c3856ba9406694a01ebfcb7cc770",
       "placeholder": "​",
       "style": "IPY_MODEL_04345600dd5145f2a1c1efbc61321566",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [08:58&lt;00:00,  8.36s/it]"
      }
     },
     "592efaee7b0c4cfcae1e5cb4abbc0050": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "59882e63902641638cfdaa52a07997d2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5acd78816eca49a2b17b8b25285f2470",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_3e7dc579e1b5408292b8fd1e1959d51c",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "5acd78816eca49a2b17b8b25285f2470": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "5ba3e467293342129e9fc9c5cb97e27f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "5c0ffc66f35744d89e07525b815292ea": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_592efaee7b0c4cfcae1e5cb4abbc0050",
       "placeholder": "​",
       "style": "IPY_MODEL_72c254fcb31e46ceb750e4450cca8a61",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [14:09&lt;00:00, 15.31s/it]"
      }
     },
     "5c6b503b8a4846c8b54a1a7602f25002": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "5d73560c254b4359959059e2ae0633ca": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "5da9955a520a47bdb96b3b7496d0c0fa": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "5eff418b2459480aad205d8be5375b19": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6472a90ee7914626a672143d2d2b080a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_1257ad144c2042f2aa10a20bd45010b6",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_b3133ea5165243869e932a7c9e284bbb",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "65163abe7fe14b2dbbd841bd37e00859": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5258259e284244e2806b0d1236c4a696",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_ccf98165c8e6470095d90ad1148acbb5",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "6a5335aab1894b488f0b279217dbb167": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6bbb2c9051f0413099fa03dd5119f946": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "6e2f94141e3b434a934ac2f05e639399": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "70684b89ad36468fa11225a3d8a6ebb8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "72c254fcb31e46ceb750e4450cca8a61": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "752a274643a14af2b59e7741b8107c76": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_4885bc3b27b74ee0934bcfc4f1d1083b",
       "placeholder": "​",
       "style": "IPY_MODEL_c0425a3164484e22aac6e7c0191f6e65",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "79851db860064acf82c916e0c11a7d0d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_8beea8ad53b14a79b3613c98dcf31230",
       "placeholder": "​",
       "style": "IPY_MODEL_315150487239443596db34d81be000a3",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "7b3dd86ba5734276a50aacc642a591a5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_c7a7b64cff714b63ad9173c495d50db1",
       "placeholder": "​",
       "style": "IPY_MODEL_84d75fe9e7964795bfb8aa0435f42c60",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [10:48&lt;00:00, 13.67s/it]"
      }
     },
     "7d238b1db9d54c91bf1d7838f0640d84": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "8077b627813d4018b8c26e238cccdad6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "819fe5f4a5384629bf4dfef2e6e5859e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "82c915e0c83846ba866bc3191467d6e0": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "83747350d9d64ebea3b4e59c26e9791b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_d7a8704bbef4455a8800793d87ec27d7",
        "IPY_MODEL_141bd918d14f45ab826061c5a22f737f",
        "IPY_MODEL_5c0ffc66f35744d89e07525b815292ea"
       ],
       "layout": "IPY_MODEL_ba5bb24fb5b341f1b64d1c83aea30a4a",
       "tabbable": null,
       "tooltip": null
      }
     },
     "847cf798b7b7461f94e70cb9bfba00a7": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "84d75fe9e7964795bfb8aa0435f42c60": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "8a7f37476da34c34854bfab27762eee8": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "8b8062b47dc0498e998d38c9410b8fa8": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "8beea8ad53b14a79b3613c98dcf31230": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "9093e2ad3a8e4a5389965d2d8b398af4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_3da8c3dee9b542a3be28e6b883f96145",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_2f9ac2d6b27643b8803344f28f46c699",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "926813f3e97e4d029b7457f617741c94": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "934fbb98b88848c086670ef446025deb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_ba0ccf409a204325a114efc97031106c",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_f365677871854c3d8388b104a756e712",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "95367bafdcce4a90934d7cd976973460": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "99b1c3c95c9b4de49efa107688ed8a84": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "9ac117c33b2441b393283fc2d875fc5a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_17c952c4081345f7a1958e5a7abbfe41",
        "IPY_MODEL_934fbb98b88848c086670ef446025deb",
        "IPY_MODEL_3c72304a37404ca78147be3e0de0c5d0"
       ],
       "layout": "IPY_MODEL_15cdb6f577794687a7d8c7c4cb05eaee",
       "tabbable": null,
       "tooltip": null
      }
     },
     "a2757cbaf88a4e95a3b1b966127ebff7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "a55277b8bf5e4e62945d0666e64f3e51": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_fc0dec07a9a246fcb448caf8aa62f529",
        "IPY_MODEL_c8cb58a3a7254513a40a1c006ad72993",
        "IPY_MODEL_0bb69d31463d4c9c9a059714e885e408"
       ],
       "layout": "IPY_MODEL_70684b89ad36468fa11225a3d8a6ebb8",
       "tabbable": null,
       "tooltip": null
      }
     },
     "a78db5645500488d8b6dfb91ad9fe631": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "a8c6f0bb542d48ba8a47fe37fe36bf18": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "a9973b94805748ea91c63d9cca5fb00e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_7d238b1db9d54c91bf1d7838f0640d84",
       "placeholder": "​",
       "style": "IPY_MODEL_b28d8b442915451bb6d5e6059e91507f",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [06:05&lt;00:00,  6.76s/it]"
      }
     },
     "ada409f95834451bbac735081ba0207d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_fd93bc185c5f4eeea8ad162cc3beeae0",
       "placeholder": "​",
       "style": "IPY_MODEL_0739bdb7b2ae4f70a08fe9ff139ef46f",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "adb2492404f64b9f9ec21067188c9d44": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "b28d8b442915451bb6d5e6059e91507f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "b3133ea5165243869e932a7c9e284bbb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "b4489057e31544d8ab74eae49e99220e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_adb2492404f64b9f9ec21067188c9d44",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_484f71db3be94feb86a97a05a3f90b4b",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "b4810bdc312c43f8ab3c1e23afa6e6d9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "b6e4212701bb46a0839ab5845b0edef9": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_79851db860064acf82c916e0c11a7d0d",
        "IPY_MODEL_6472a90ee7914626a672143d2d2b080a",
        "IPY_MODEL_d468104cf450413ba590909ee951ee66"
       ],
       "layout": "IPY_MODEL_c90bba235c1441c0b600173cbe3c84ee",
       "tabbable": null,
       "tooltip": null
      }
     },
     "ba0b73af5a584deca15e755bec725120": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_b4810bdc312c43f8ab3c1e23afa6e6d9",
       "placeholder": "​",
       "style": "IPY_MODEL_250a5f37434e4173a06eca09fecd3c54",
       "tabbable": null,
       "tooltip": null,
       "value": " 10/10 [2:15:08&lt;00:00, 1031.70s/it]"
      }
     },
     "ba0ccf409a204325a114efc97031106c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ba5bb24fb5b341f1b64d1c83aea30a4a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ba8512b549ed40efa69a12aa747cbaeb": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_4f1cff4a4ed84666b6cdc94ade9b19c6",
        "IPY_MODEL_3a07c7b2846742e496a66025b272984c",
        "IPY_MODEL_efe41591d510486f88a35ee4c36d8876"
       ],
       "layout": "IPY_MODEL_2558f3b0de2d4403ab6241b320b60c72",
       "tabbable": null,
       "tooltip": null
      }
     },
     "bc1aad3779e84cc1ba7f8305c4eb611a": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c0425a3164484e22aac6e7c0191f6e65": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "c04fdcf17b514647a46ed845762a0772": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c46e8c8fd84d4ebea98458aa56b7c735": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "c56f9f7a4fb1454890a4752d20303346": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c7a7b64cff714b63ad9173c495d50db1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c8cb58a3a7254513a40a1c006ad72993": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_0c544dadce444edba75970d22b779572",
       "max": 10.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_8077b627813d4018b8c26e238cccdad6",
       "tabbable": null,
       "tooltip": null,
       "value": 10.0
      }
     },
     "c90bba235c1441c0b600173cbe3c84ee": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "c9982b6ae1ef40279a7aa74e12adab21": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ca8bb878338f4dc4a7ee638504f12518": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "cbe625d665134ab9a1ebe702245fd210": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_a8c6f0bb542d48ba8a47fe37fe36bf18",
       "placeholder": "​",
       "style": "IPY_MODEL_da6f8cb37d5442fcb4b3e394a8c5d0c5",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [12:50&lt;00:00, 19.18s/it]"
      }
     },
     "ccf98165c8e6470095d90ad1148acbb5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "d468104cf450413ba590909ee951ee66": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5d73560c254b4359959059e2ae0633ca",
       "placeholder": "​",
       "style": "IPY_MODEL_c46e8c8fd84d4ebea98458aa56b7c735",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [20:58&lt;00:00, 25.47s/it]"
      }
     },
     "d5799a1883ef435e8862a5d1ddaa358a": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "d7a8704bbef4455a8800793d87ec27d7": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_5da9955a520a47bdb96b3b7496d0c0fa",
       "placeholder": "​",
       "style": "IPY_MODEL_e64d4276d7ed48b7ba175f76dbf1f461",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "d8bbae4fdecf44a19ab22b1700ac001c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "d980b71ecb3044948cc751b9cd63a89b": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "da226b6f791044b9ad8ca1059c46a1f2": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_c56f9f7a4fb1454890a4752d20303346",
       "max": 10.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_24a092d46c6a47c489122f2036e063ba",
       "tabbable": null,
       "tooltip": null,
       "value": 10.0
      }
     },
     "da6f8cb37d5442fcb4b3e394a8c5d0c5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "de51d063a748497ab3e0c0d67373fd1c": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_95367bafdcce4a90934d7cd976973460",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_513ace2f58784eaba0dddfae5d9904c5",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "dfd91359cbda4589b1aec490e0697541": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "e64d4276d7ed48b7ba175f76dbf1f461": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "background": null,
       "description_width": "",
       "font_size": null,
       "text_color": null
      }
     },
     "edfc9c9f4e074acca86aad6386a28dd9": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ee26fa6543d4419191068914b9199bdb": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "ef23c9e858754114a419283b46271cc7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "efe41591d510486f88a35ee4c36d8876": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_0fb686173fb4434488ad234df5ba615e",
       "placeholder": "​",
       "style": "IPY_MODEL_28e2e7802bdf4ca892fac9cc48c731c9",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [18:34&lt;00:00, 24.51s/it]"
      }
     },
     "f018037200ac4327a46ddc2be919f150": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "f0ed5859ce1f4c3092ab92b0ff3b4eb5": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_752a274643a14af2b59e7741b8107c76",
        "IPY_MODEL_9093e2ad3a8e4a5389965d2d8b398af4",
        "IPY_MODEL_a9973b94805748ea91c63d9cca5fb00e"
       ],
       "layout": "IPY_MODEL_2634c104490a4600abf665084a8b6122",
       "tabbable": null,
       "tooltip": null
      }
     },
     "f365677871854c3d8388b104a756e712": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "ProgressStyleModel",
      "state": {
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "ProgressStyleModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "StyleView",
       "bar_color": null,
       "description_width": ""
      }
     },
     "f5ae932d777444be9784be58a2149b8e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HBoxModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HBoxModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HBoxView",
       "box_style": "",
       "children": [
        "IPY_MODEL_1724daba5c0a478d9df2a882a7bcb155",
        "IPY_MODEL_65163abe7fe14b2dbbd841bd37e00859",
        "IPY_MODEL_cbe625d665134ab9a1ebe702245fd210"
       ],
       "layout": "IPY_MODEL_ca8bb878338f4dc4a7ee638504f12518",
       "tabbable": null,
       "tooltip": null
      }
     },
     "fa03c3856ba9406694a01ebfcb7cc770": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fc0dec07a9a246fcb448caf8aa62f529": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_6bbb2c9051f0413099fa03dd5119f946",
       "placeholder": "​",
       "style": "IPY_MODEL_520b96c4d5ed435fa8c68cbd39da8ea4",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     },
     "fcff4305b21940f5a1c74e0711d37834": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "FloatProgressModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "FloatProgressModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "ProgressView",
       "bar_style": "success",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_bc1aad3779e84cc1ba7f8305c4eb611a",
       "max": 100.0,
       "min": 0.0,
       "orientation": "horizontal",
       "style": "IPY_MODEL_819fe5f4a5384629bf4dfef2e6e5859e",
       "tabbable": null,
       "tooltip": null,
       "value": 100.0
      }
     },
     "fd93bc185c5f4eeea8ad162cc3beeae0": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "2.0.0",
      "model_name": "LayoutModel",
      "state": {
       "_model_module": "@jupyter-widgets/base",
       "_model_module_version": "2.0.0",
       "_model_name": "LayoutModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/base",
       "_view_module_version": "2.0.0",
       "_view_name": "LayoutView",
       "align_content": null,
       "align_items": null,
       "align_self": null,
       "border_bottom": null,
       "border_left": null,
       "border_right": null,
       "border_top": null,
       "bottom": null,
       "display": null,
       "flex": null,
       "flex_flow": null,
       "grid_area": null,
       "grid_auto_columns": null,
       "grid_auto_flow": null,
       "grid_auto_rows": null,
       "grid_column": null,
       "grid_gap": null,
       "grid_row": null,
       "grid_template_areas": null,
       "grid_template_columns": null,
       "grid_template_rows": null,
       "height": null,
       "justify_content": null,
       "justify_items": null,
       "left": null,
       "margin": null,
       "max_height": null,
       "max_width": null,
       "min_height": null,
       "min_width": null,
       "object_fit": null,
       "object_position": null,
       "order": null,
       "overflow": null,
       "padding": null,
       "right": null,
       "top": null,
       "visibility": null,
       "width": null
      }
     },
     "fdc2f19ce48443c6b4e8b3cdb79cca37": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_8b8062b47dc0498e998d38c9410b8fa8",
       "placeholder": "​",
       "style": "IPY_MODEL_5ba3e467293342129e9fc9c5cb97e27f",
       "tabbable": null,
       "tooltip": null,
       "value": " 100/100 [12:28&lt;00:00, 19.78s/it]"
      }
     },
     "fecacb8a6a504240abbc3b40a43c7e78": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "2.0.0",
      "model_name": "HTMLModel",
      "state": {
       "_dom_classes": [],
       "_model_module": "@jupyter-widgets/controls",
       "_model_module_version": "2.0.0",
       "_model_name": "HTMLModel",
       "_view_count": null,
       "_view_module": "@jupyter-widgets/controls",
       "_view_module_version": "2.0.0",
       "_view_name": "HTMLView",
       "description": "",
       "description_allow_html": false,
       "layout": "IPY_MODEL_2838b6f0772f499f9ec5d776d81d6567",
       "placeholder": "​",
       "style": "IPY_MODEL_dfd91359cbda4589b1aec490e0697541",
       "tabbable": null,
       "tooltip": null,
       "value": "100%"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
